Skip to content

Commit e9f623e

Browse files
committed
Add AccessKey in WindowedContentDialog
1 parent c3bb229 commit e9f623e

File tree

5 files changed

+73
-22
lines changed

5 files changed

+73
-22
lines changed

dev/DevWinUI.Controls/Controls/MessageBox/MessageBoxBase.cs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ protected void DetermineButtonText()
8383
{
8484
MessageBoxButtonString okString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.OK);
8585
_dialog.CloseButtonText = okString.Text;
86-
_dialog.CloseButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = okString.Key });
86+
_dialog.CloseButtonAccessKey = okString.Key;
8787
_dialog.DefaultButton = ContentDialogButton.Close;
8888
break;
8989
}
@@ -93,9 +93,9 @@ protected void DetermineButtonText()
9393
MessageBoxButtonString okString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.OK);
9494
MessageBoxButtonString cancelString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.Cancel);
9595
_dialog.PrimaryButtonText = okString.Text;
96-
_dialog.PrimaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = okString.Key });
96+
_dialog.PrimaryButtonAccessKey = okString.Key;
9797
_dialog.CloseButtonText = cancelString.Text;
98-
_dialog.CloseButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = cancelString.Key });
98+
_dialog.CloseButtonAccessKey = cancelString.Key;
9999
_dialog.DefaultButton = ContentDialogButton.Close;
100100
break;
101101
}
@@ -105,9 +105,9 @@ protected void DetermineButtonText()
105105
MessageBoxButtonString yesString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.Yes);
106106
MessageBoxButtonString noString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.No);
107107
_dialog.PrimaryButtonText = yesString.Text;
108-
_dialog.PrimaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = yesString.Key });
108+
_dialog.PrimaryButtonAccessKey = yesString.Key;
109109
_dialog.SecondaryButtonText = noString.Text;
110-
_dialog.SecondaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = noString.Key });
110+
_dialog.SecondaryButtonAccessKey = noString.Key;
111111
break;
112112
}
113113

@@ -117,11 +117,11 @@ protected void DetermineButtonText()
117117
MessageBoxButtonString noString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.No);
118118
MessageBoxButtonString cancelString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.Cancel);
119119
_dialog.PrimaryButtonText = yesString.Text;
120-
_dialog.PrimaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = yesString.Key });
120+
_dialog.PrimaryButtonAccessKey = yesString.Key;
121121
_dialog.SecondaryButtonText = noString.Text;
122-
_dialog.SecondaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = noString.Key });
122+
_dialog.SecondaryButtonAccessKey = noString.Key;
123123
_dialog.CloseButtonText = cancelString.Text;
124-
_dialog.CloseButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = cancelString.Key });
124+
_dialog.CloseButtonAccessKey = cancelString.Key;
125125
break;
126126
}
127127

@@ -131,11 +131,11 @@ protected void DetermineButtonText()
131131
MessageBoxButtonString retryString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.Retry);
132132
MessageBoxButtonString ignoreString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.Ignore);
133133
_dialog.PrimaryButtonText = abortString.Text;
134-
_dialog.PrimaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = abortString.Key });
134+
_dialog.PrimaryButtonAccessKey = abortString.Key;
135135
_dialog.SecondaryButtonText = retryString.Text;
136-
_dialog.SecondaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = retryString.Key });
136+
_dialog.SecondaryButtonAccessKey = retryString.Key;
137137
_dialog.CloseButtonText = ignoreString.Text;
138-
_dialog.CloseButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = ignoreString.Key });
138+
_dialog.CloseButtonAccessKey = ignoreString.Key;
139139
break;
140140
}
141141

@@ -144,9 +144,9 @@ protected void DetermineButtonText()
144144
MessageBoxButtonString retryString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.Retry);
145145
MessageBoxButtonString cancelString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.Cancel);
146146
_dialog.PrimaryButtonText = retryString.Text;
147-
_dialog.PrimaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = retryString.Key });
147+
_dialog.PrimaryButtonAccessKey = retryString.Key;
148148
_dialog.SecondaryButtonText = cancelString.Text;
149-
_dialog.SecondaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = cancelString.Key });
149+
_dialog.SecondaryButtonAccessKey = cancelString.Key;
150150
break;
151151
}
152152

@@ -156,11 +156,11 @@ protected void DetermineButtonText()
156156
MessageBoxButtonString tryString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.TryAgain);
157157
MessageBoxButtonString cancelString = MessageBoxButtonString.FromUser32(NativeMessageBoxButtonStringLoader.Cancel);
158158
_dialog.PrimaryButtonText = continueString.Text;
159-
_dialog.PrimaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = continueString.Key });
159+
_dialog.PrimaryButtonAccessKey = continueString.Key;
160160
_dialog.SecondaryButtonText = tryString.Text;
161-
_dialog.SecondaryButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = tryString.Key });
161+
_dialog.SecondaryButtonAccessKey = tryString.Key;
162162
_dialog.CloseButtonText = cancelString.Text;
163-
_dialog.CloseButtonKeyboardAccelerators.Add(new KeyboardAccelerator { Key = cancelString.Key });
163+
_dialog.CloseButtonAccessKey = cancelString.Key;
164164
_dialog.DefaultButton = ContentDialogButton.Close;
165165
break;
166166
}
@@ -182,33 +182,33 @@ protected async Task<MessageBoxResult> ShowAndWaitForResultAsync()
182182

183183
private struct MessageBoxButtonString
184184
{
185-
public MessageBoxButtonString(string text, VirtualKey virtualKey)
185+
public MessageBoxButtonString(string text, string key)
186186
{
187187
Text = text;
188-
Key = virtualKey;
188+
Key = key;
189189
}
190190

191191
public static MessageBoxButtonString FromUser32(string loadedString)
192192
{
193193
string text;
194-
VirtualKey key;
194+
string key;
195195
int i = loadedString.IndexOf('&');
196196
if (i == -1)
197197
{
198198
text = loadedString;
199-
key = VirtualKey.None;
199+
key = string.Empty;
200200
}
201201
else
202202
{
203203
text = loadedString.Remove(i, 1);
204-
key = (VirtualKey)loadedString[i + 1]; // For letters, VirtualKey enum value is the same as unicode.
204+
key = loadedString[i + 1].ToString(); // For letters, VirtualKey enum value is the same as unicode.
205205
}
206206
return new MessageBoxButtonString(text, key);
207207
}
208208

209209
public string Text { get; }
210210

211-
public VirtualKey Key { get; }
211+
public string Key { get; }
212212
}
213213

214214
private static readonly MessageBoxResult[][] resultGroups = [

dev/DevWinUI.Controls/Controls/WindowedContentDialog/ContentDialogContent.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,33 @@ public Style? CloseButtonStyle
136136
public IList<KeyboardAccelerator> SecondaryButtonKeyboardAccelerators => field ??= [];
137137
public IList<KeyboardAccelerator> CloseButtonKeyboardAccelerators => field ??= [];
138138

139+
public string PrimaryButtonAccessKey
140+
{
141+
get { return (string)GetValue(PrimaryButtonAccessKeyProperty); }
142+
set { SetValue(PrimaryButtonAccessKeyProperty, value); }
143+
}
144+
145+
public static readonly DependencyProperty PrimaryButtonAccessKeyProperty =
146+
DependencyProperty.Register(nameof(PrimaryButtonAccessKey), typeof(string), typeof(ContentDialogContent), new PropertyMetadata(null));
147+
148+
public string SecondaryButtonAccessKey
149+
{
150+
get { return (string)GetValue(SecondaryButtonAccessKeyProperty); }
151+
set { SetValue(SecondaryButtonAccessKeyProperty, value); }
152+
}
153+
154+
public static readonly DependencyProperty SecondaryButtonAccessKeyProperty =
155+
DependencyProperty.Register(nameof(SecondaryButtonAccessKey), typeof(string), typeof(ContentDialogContent), new PropertyMetadata(null));
156+
157+
public string CloseButtonAccessKey
158+
{
159+
get { return (string)GetValue(CloseButtonAccessKeyProperty); }
160+
set { SetValue(CloseButtonAccessKeyProperty, value); }
161+
}
162+
163+
public static readonly DependencyProperty CloseButtonAccessKeyProperty =
164+
DependencyProperty.Register(nameof(CloseButtonAccessKey), typeof(string), typeof(ContentDialogContent), new PropertyMetadata(null));
165+
139166
public UIElement TitleArea { get; private set; }
140167
public Grid DialogSpace { get; private set; }
141168
public Grid CommandSpace { get; private set; }

dev/DevWinUI.Controls/Controls/WindowedContentDialog/IStandaloneContentDialog.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,8 @@ public interface IStandaloneContentDialog
3939
public IList<KeyboardAccelerator> PrimaryButtonKeyboardAccelerators { get; }
4040
public IList<KeyboardAccelerator> SecondaryButtonKeyboardAccelerators { get; }
4141
public IList<KeyboardAccelerator> CloseButtonKeyboardAccelerators { get; }
42+
43+
public string PrimaryButtonAccessKey { get; set; }
44+
public string SecondaryButtonAccessKey { get; set; }
45+
public string CloseButtonAccessKey { get; set; }
4246
}

dev/DevWinUI.Controls/Controls/WindowedContentDialog/WindowedContentDialog.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,23 @@ private void InitializeContentDialogWindow()
4646
public IList<KeyboardAccelerator> PrimaryButtonKeyboardAccelerators => ContentDialogContent.PrimaryButtonKeyboardAccelerators;
4747
public IList<KeyboardAccelerator> SecondaryButtonKeyboardAccelerators => ContentDialogContent.SecondaryButtonKeyboardAccelerators;
4848
public IList<KeyboardAccelerator> CloseButtonKeyboardAccelerators => ContentDialogContent.CloseButtonKeyboardAccelerators;
49+
50+
public string? PrimaryButtonAccessKey
51+
{
52+
get => ContentDialogContent.PrimaryButtonAccessKey;
53+
set => ContentDialogContent.PrimaryButtonAccessKey = value;
54+
}
55+
public string? SecondaryButtonAccessKey
56+
{
57+
get => ContentDialogContent.SecondaryButtonAccessKey;
58+
set => ContentDialogContent.SecondaryButtonAccessKey = value;
59+
}
60+
public string? CloseButtonAccessKey
61+
{
62+
get => ContentDialogContent.CloseButtonAccessKey;
63+
set => ContentDialogContent.CloseButtonAccessKey = value;
64+
}
65+
4966
#region properties
5067

5168
public object? Title

dev/DevWinUI.Controls/Themes/Styles/Controls/ContentDialogContent.xaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
</Grid.ColumnDefinitions>
191191
<Button x:Name="PrimaryButton"
192192
HorizontalAlignment="Stretch"
193+
AccessKey="{TemplateBinding PrimaryButtonAccessKey}"
193194
Content="{TemplateBinding PrimaryButtonText}"
194195
ElementSoundMode="FocusOnly"
195196
IsEnabled="{TemplateBinding IsPrimaryButtonEnabled}"
@@ -198,6 +199,7 @@
198199
ToolTipService.ToolTip="{TemplateBinding PrimaryButtonText}" />
199200
<Button x:Name="SecondaryButton"
200201
HorizontalAlignment="Stretch"
202+
AccessKey="{TemplateBinding SecondaryButtonAccessKey}"
201203
Content="{TemplateBinding SecondaryButtonText}"
202204
ElementSoundMode="FocusOnly"
203205
IsEnabled="{TemplateBinding IsSecondaryButtonEnabled}"
@@ -207,6 +209,7 @@
207209
<Button x:Name="CloseButton"
208210
Grid.Column="4"
209211
HorizontalAlignment="Stretch"
212+
AccessKey="{TemplateBinding CloseButtonAccessKey}"
210213
Content="{TemplateBinding CloseButtonText}"
211214
ElementSoundMode="FocusOnly"
212215
IsTabStop="True"

0 commit comments

Comments
 (0)