Browse Source

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

release/11.2.6
pavelovcharov 11 months ago
committed by Julien Lebosquain
parent
commit
c0f2c33c59
  1. 4
      src/Avalonia.Controls/Button.cs
  2. 42
      tests/Avalonia.Controls.UnitTests/ButtonTests.cs

4
src/Avalonia.Controls/Button.cs

@ -659,7 +659,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;
@ -673,7 +673,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

@ -448,6 +448,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()
@ -482,6 +503,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