Browse Source

Button.IsDefault should not work when button is not effectively visible (#18484)

pull/18315/head
pavelovcharov 11 months ago
committed by GitHub
parent
commit
a7c7f272c5
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      src/Avalonia.Controls/Button.cs
  2. 42
      tests/Avalonia.Controls.UnitTests/ButtonTests.cs

4
src/Avalonia.Controls/Button.cs

@ -678,7 +678,7 @@ namespace Avalonia.Controls
/// <param name="e">The event args.</param>
private void RootDefaultKeyDown(object? sender, KeyEventArgs e)
{
if (e.Key == Key.Enter && IsVisible && IsEnabled)
if (e.Key == Key.Enter && IsEffectivelyVisible && IsEffectivelyEnabled)
{
OnClick();
e.Handled = true;
@ -692,7 +692,7 @@ namespace Avalonia.Controls
/// <param name="e">The event args.</param>
private void RootCancelKeyDown(object? sender, KeyEventArgs e)
{
if (e.Key == Key.Escape && IsVisible && IsEnabled)
if (e.Key == Key.Escape && IsEffectivelyVisible && IsEffectivelyEnabled)
{
OnClick();
e.Handled = true;

42
tests/Avalonia.Controls.UnitTests/ButtonTests.cs

@ -455,6 +455,27 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(2, raised);
}
}
[Fact]
public void Button_IsDefault_Should_Not_Work_When_Button_Is_Not_Effectively_Visible()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var raised = 0;
var panel = new Panel();
var target = new Button();
panel.Children.Add(target);
var window = new Window { Content = panel };
window.Show();
target.Click += (s, e) => ++raised;
target.IsDefault = true;
panel.IsVisible = false;
window.RaiseEvent(CreateKeyDownEvent(Key.Enter));
Assert.Equal(0, raised);
}
}
[Fact]
public void Button_IsCancel_Works()
@ -489,6 +510,27 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(2, raised);
}
}
[Fact]
public void Button_IsCancel_Should_Not_Work_When_Button_Is_Not_Effectively_Visible()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var raised = 0;
var panel = new Panel();
var target = new Button();
panel.Children.Add(target);
var window = new Window { Content = panel };
window.Show();
target.Click += (s, e) => ++raised;
target.IsCancel = true;
panel.IsVisible = false;
window.RaiseEvent(CreateKeyDownEvent(Key.Escape));
Assert.Equal(0, raised);
}
}
[Fact]
public void Button_CommandParameter_Does_Not_Change_While_Execution()

Loading…
Cancel
Save