|
// 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.UI.Accessibility;
using static System.Windows.Forms.PropertyGridInternal.PropertyDescriptorGridEntry;
namespace System.Windows.Forms.PropertyGridInternal;
internal partial class PropertyGridView
{
internal partial class DropDownHolder
{
internal sealed class DropDownHolderAccessibleObject : ControlAccessibleObject
{
private readonly DropDownHolder _owningDropDownHolder;
public DropDownHolderAccessibleObject(DropDownHolder dropDownHolder) : base(dropDownHolder)
{
_owningDropDownHolder = dropDownHolder;
}
internal override IRawElementProviderFragment.Interface? FragmentNavigate(NavigateDirection direction)
{
if (!ExistsInAccessibleTree)
{
return null;
}
PropertyGridView? gridView = _owningDropDownHolder._gridView;
GridEntry? selectedEntry = gridView?.SelectedGridEntry;
if (selectedEntry?.AccessibilityObject is not PropertyDescriptorGridEntryAccessibleObject parent)
{
return null;
}
return direction switch
{
NavigateDirection.NavigateDirection_Parent => parent,
NavigateDirection.NavigateDirection_NextSibling => parent.GetNextChild(this),
NavigateDirection.NavigateDirection_PreviousSibling => parent.GetPreviousChild(this),
NavigateDirection.NavigateDirection_FirstChild or NavigateDirection.NavigateDirection_LastChild
when selectedEntry.Enumerable && _owningDropDownHolder.Component == gridView!.DropDownListBox
=> gridView.DropDownListBoxAccessibleObject,
_ => base.FragmentNavigate(direction),
};
}
internal override IRawElementProviderFragmentRoot.Interface? FragmentRoot =>
_owningDropDownHolder._gridView?.AccessibilityObject;
public override string? Name => SR.PropertyGridViewDropDownControlHolderAccessibleName;
private protected override bool IsInternal => true;
internal override bool CanGetNameInternal => false;
private bool ExistsInAccessibleTree => _owningDropDownHolder.IsHandleCreated && _owningDropDownHolder.Visible;
}
}
}
|