| File: System\Windows\Forms\Controls\ListView\ListViewLabelEditAccessibleObject.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\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; using static System.Windows.Forms.ListViewItem.ListViewSubItem; namespace System.Windows.Forms; internal sealed unsafe class ListViewLabelEditAccessibleObject : LabelEditAccessibleObject { private const string LIST_VIEW_LABEL_EDIT_AUTOMATION_ID = "1"; private readonly WeakReference<ListView> _owningListView; public ListViewLabelEditAccessibleObject(ListView owningListView, ListViewLabelEditNativeWindow labelEdit) : base(owningListView, labelEdit) { ArgumentNullException.ThrowIfNull(owningListView); _owningListView = new(owningListView); UseStdAccessibleObjects(labelEdit.Handle); } private ListViewSubItemAccessibleObject? OwningSubItemAccessibleObject => _owningListView.TryGetTarget(out ListView? target) ? target._listViewSubItem?.AccessibilityObject as ListViewSubItemAccessibleObject : null; private AccessibleObject? OwningListViewItemAccessibleObject => _owningListView.TryGetTarget(out ListView? target) ? target._selectedItem?.AccessibilityObject : null; private protected override string AutomationId => LIST_VIEW_LABEL_EDIT_AUTOMATION_ID; public override AccessibleObject? Parent => _owningListView.TryGetTarget(out ListView? target) ? target._listViewSubItem is null ? OwningListViewItemAccessibleObject : target.View == View.Tile ? OwningListViewItemAccessibleObject : OwningSubItemAccessibleObject : null; private protected override bool IsInternal => true; internal override VARIANT GetPropertyValue(UIA_PROPERTY_ID propertyID) => propertyID switch { UIA_PROPERTY_ID.UIA_IsEnabledPropertyId => _owningListView.TryGetTarget(out ListView? target) ? (VARIANT)target.Enabled : VARIANT.False, _ => base.GetPropertyValue(propertyID) }; internal override IRawElementProviderFragment.Interface? FragmentNavigate(NavigateDirection direction) => direction switch { NavigateDirection.NavigateDirection_NextSibling => _owningListView.TryGetTarget(out ListView? target) && target.View == View.Tile ? target._selectedItem?.SubItems[1].AccessibilityObject : null, _ => base.FragmentNavigate(direction) }; internal override IRawElementProviderFragmentRoot.Interface? FragmentRoot => _owningListView.TryGetTarget(out ListView? target) ? target.AccessibilityObject : null; }