refine message box.

This commit is contained in:
Michael Bucari-Tovo 2022-07-14 13:26:36 -06:00
parent 61a529e62b
commit de3524d688
2 changed files with 43 additions and 0 deletions

View File

@ -211,6 +211,11 @@ namespace LibationWinForms.AvaloniaUI
private static async Task<DialogResult> ShowCore2(Window owner, string message, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) private static async Task<DialogResult> ShowCore2(Window owner, string message, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
{ {
var dialog = new MessageBoxWindow(); var dialog = new MessageBoxWindow();
#if WINDOWS7_0
HideMinMaxBtns(dialog.PlatformImpl.Handle.Handle);
#endif
var vm = new MessageBoxViewModel(message, caption, buttons, icon, defaultButton); var vm = new MessageBoxViewModel(message, caption, buttons, icon, defaultButton);
dialog.DataContext = vm; dialog.DataContext = vm;
dialog.CanResize = false; dialog.CanResize = false;
@ -236,6 +241,22 @@ namespace LibationWinForms.AvaloniaUI
dialog.Height = dialog.MinHeight; dialog.Height = dialog.MinHeight;
dialog.Width = dialog.MinWidth; dialog.Width = dialog.MinWidth;
dialog.Opened += (_, _) =>
{
switch (defaultButton)
{
case MessageBoxDefaultButton.Button1:
dialog.FindControl<Button>("Button1").Focus();
break;
case MessageBoxDefaultButton.Button2:
dialog.FindControl<Button>("Button2").Focus();
break;
case MessageBoxDefaultButton.Button3:
dialog.FindControl<Button>("Button3").Focus();
break;
}
};
if (owner is null) if (owner is null)
{ {
@ -266,5 +287,22 @@ namespace LibationWinForms.AvaloniaUI
return await dialog.ShowDialog<DialogResult>(owner); return await dialog.ShowDialog<DialogResult>(owner);
} }
} }
#if WINDOWS7_0
private static void HideMinMaxBtns(IntPtr handle)
{
var currentStyle = GetWindowLong(handle, GWL_STYLE);
SetWindowLong(handle, GWL_STYLE, currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);
}
const long WS_MINIMIZEBOX = 0x00020000L;
const long WS_MAXIMIZEBOX = 0x10000L;
const int GWL_STYLE = -16;
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowLong")]
static extern long GetWindowLong(IntPtr hWnd, int nIndex);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, long dwNewLong);
#endif
} }
} }

View File

@ -27,6 +27,11 @@
</DockPanel> </DockPanel>
<DockPanel Height="45" Grid.Row="1" Background="LightGray"> <DockPanel Height="45" Grid.Row="1" Background="LightGray">
<DockPanel.Styles>
<Style Selector="Button:focus">
<Setter Property="Background" Value="{DynamicResource SystemAccentColor}" />
</Style>
</DockPanel.Styles>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="5" DockPanel.Dock="Bottom"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="5" DockPanel.Dock="Bottom">
<Button Grid.Column="0" MinWidth="75" MinHeight="25" Name="Button1" Click="Button1_Click" Margin="5"> <Button Grid.Column="0" MinWidth="75" MinHeight="25" Name="Button1" Click="Button1_Click" Margin="5">
<TextBlock VerticalAlignment="Center" Text="{Binding Button1Text}"/> <TextBlock VerticalAlignment="Center" Text="{Binding Button1Text}"/>