Browse Source

Added property changed event for IToggleProvider (#20486)

pull/20505/head
Melissa 3 weeks ago
committed by GitHub
parent
commit
a77f7adce0
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 26
      src/Avalonia.Controls/Automation/Peers/ToggleButtonAutomationPeer.cs
  2. 15
      src/Avalonia.Controls/Automation/TogglePatternIdentifiers.cs
  3. 6
      src/Windows/Avalonia.Win32.Automation/AutomationNode.cs

26
src/Avalonia.Controls/Automation/Peers/ToggleButtonAutomationPeer.cs

@ -1,4 +1,5 @@
using Avalonia.Automation.Provider;
using Avalonia.Controls.Automation;
using Avalonia.Controls.Primitives;
namespace Avalonia.Automation.Peers
@ -8,19 +9,28 @@ namespace Avalonia.Automation.Peers
public ToggleButtonAutomationPeer(ToggleButton owner)
: base(owner)
{
Owner.PropertyChanged += (a, e) =>
{
if (e.Property == ToggleButton.IsCheckedProperty)
{
RaisePropertyChangedEvent(
TogglePatternIdentifiers.ToggleStateProperty,
ToState((bool?)e.OldValue),
ToState((bool?)e.NewValue));
}
};
}
public new ToggleButton Owner => (ToggleButton)base.Owner;
ToggleState IToggleProvider.ToggleState
private ToggleState ToState(bool? value) => value switch
{
get => Owner.IsChecked switch
{
true => ToggleState.On,
false => ToggleState.Off,
null => ToggleState.Indeterminate,
};
}
true => ToggleState.On,
false => ToggleState.Off,
null => ToggleState.Indeterminate,
};
ToggleState IToggleProvider.ToggleState => ToState(Owner.IsChecked);
void IToggleProvider.Toggle()
{

15
src/Avalonia.Controls/Automation/TogglePatternIdentifiers.cs

@ -0,0 +1,15 @@
using Avalonia.Automation.Provider;
namespace Avalonia.Automation
{
/// <summary>
/// Contains values used as identifiers by <see cref="IToggleProvider"/>.
/// </summary>
public static class TogglePatternIdentifiers
{
/// <summary>
/// Identifies the <see cref="IToggleProvider.ToggleState"/> property.
/// </summary>
public static AutomationProperty ToggleStateProperty { get; } = new AutomationProperty();
}
}

6
src/Windows/Avalonia.Win32.Automation/AutomationNode.cs

@ -54,10 +54,8 @@ namespace Avalonia.Win32.Automation
{ SelectionPatternIdentifiers.IsSelectionRequiredProperty, UiaPropertyId.SelectionIsSelectionRequired },
{ SelectionPatternIdentifiers.SelectionProperty, UiaPropertyId.SelectionSelection },
{ SelectionItemPatternIdentifiers.IsSelectedProperty, UiaPropertyId.SelectionItemIsSelected },
{
SelectionItemPatternIdentifiers.SelectionContainerProperty,
UiaPropertyId.SelectionItemSelectionContainer
}
{ SelectionItemPatternIdentifiers.SelectionContainerProperty, UiaPropertyId.SelectionItemSelectionContainer },
{ TogglePatternIdentifiers.ToggleStateProperty, UiaPropertyId.ToggleToggleState },
};
private static ConditionalWeakTable<AutomationPeer, AutomationNode> s_nodes = new();

Loading…
Cancel
Save