File: System\Windows\Forms\Controls\Buttons\RadioButton.RadioButtonAccessibleObject.cs
Web Access
Project: src\src\System.Windows.Forms\src\System.Windows.Forms.csproj (System.Windows.Forms)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Windows.Win32.System.Variant;
using Windows.Win32.UI.Accessibility;
 
namespace System.Windows.Forms;
 
public partial class RadioButton
{
    public class RadioButtonAccessibleObject(RadioButton owner) : ControlAccessibleObject(owner)
    {
        public override string DefaultAction =>
            this.TryGetOwnerAs(out RadioButton? owner) && owner.AccessibleDefaultActionDescription is { } description
                ? description
                : SR.AccessibleActionCheck;
 
        internal override bool CanGetDefaultActionInternal => false;
 
        public override AccessibleRole Role => this.GetOwnerAccessibleRole(AccessibleRole.RadioButton);
 
        public override AccessibleStates State =>
            this.TryGetOwnerAs(out RadioButton? owner) && owner.Checked
                ? AccessibleStates.Checked | base.State
                : base.State;
 
        internal override bool IsItemSelected => this.TryGetOwnerAs(out RadioButton? owner) && owner.Checked;
 
        public override void DoDefaultAction()
        {
            if (this.IsOwnerHandleCreated(out RadioButton? owner))
            {
                owner.PerformClick();
            }
        }
 
        internal override VARIANT GetPropertyValue(UIA_PROPERTY_ID propertyID) => propertyID switch
        {
            UIA_PROPERTY_ID.UIA_HasKeyboardFocusPropertyId => (VARIANT)(this.TryGetOwnerAs(out RadioButton? owner) && owner.Focused),
            UIA_PROPERTY_ID.UIA_IsKeyboardFocusablePropertyId
                // This is necessary for compatibility with MSAA proxy:
                // IsKeyboardFocusable = true regardless the control is enabled/disabled.
                => VARIANT.True,
            _ => base.GetPropertyValue(propertyID)
        };
 
        internal override bool IsPatternSupported(UIA_PATTERN_ID patternId) => patternId switch
        {
            var p when p == UIA_PATTERN_ID.UIA_SelectionItemPatternId => true,
            _ => base.IsPatternSupported(patternId)
        };
 
        public override string? KeyboardShortcut => this.TryGetOwnerAs(out RadioButton? owner)
            ? ButtonBaseAccessibleObject.GetKeyboardShortcut(owner, owner.UseMnemonic, PreviousLabel)
            : null;
 
        public override string? Name
        {
            get
            {
                if (!this.TryGetOwnerAs(out RadioButton? owner))
                {
                    return null;
                }
 
                if (owner.AccessibleName is { } name)
                {
                    return name;
                }
 
                return owner.UseMnemonic ? WindowsFormsUtils.TextWithoutMnemonics(TextLabel) : TextLabel;
            }
        }
    }
}