diff --git a/src/Wpf.Ui/Controls/NavigationView/NavigationViewItem.cs b/src/Wpf.Ui/Controls/NavigationView/NavigationViewItem.cs index e85c80677..1ba2fb984 100644 --- a/src/Wpf.Ui/Controls/NavigationView/NavigationViewItem.cs +++ b/src/Wpf.Ui/Controls/NavigationView/NavigationViewItem.cs @@ -8,8 +8,10 @@ using System.Collections; using System.Collections.ObjectModel; using System.Collections.Specialized; +using System.Windows.Automation.Peers; using System.Windows.Controls; using System.Windows.Input; +using Wpf.Ui.Controls.NavigationView; // ReSharper disable once CheckNamespace namespace Wpf.Ui.Controls; @@ -438,6 +440,11 @@ protected override void OnMouseDown(MouseButtonEventArgs e) e.Handled = true; } + protected override AutomationPeer OnCreateAutomationPeer() + { + return new NavigationViewItemAutomationPeer(this); + } + private void OnMenuItems_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) { SetValue(HasMenuItemsPropertyKey, MenuItems.Count > 0); diff --git a/src/Wpf.Ui/Controls/NavigationView/NavigationViewItemAutomationPeer.cs b/src/Wpf.Ui/Controls/NavigationView/NavigationViewItemAutomationPeer.cs new file mode 100644 index 000000000..7a78729c5 --- /dev/null +++ b/src/Wpf.Ui/Controls/NavigationView/NavigationViewItemAutomationPeer.cs @@ -0,0 +1,72 @@ +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. +// Copyright (C) Leszek Pomianowski and WPF UI Contributors. +// All Rights Reserved. + +using System.Windows.Automation; +using System.Windows.Automation.Peers; + +namespace Wpf.Ui.Controls; + +internal class NavigationViewItemAutomationPeer : FrameworkElementAutomationPeer +{ + private readonly NavigationViewItem _owner; + + public NavigationViewItemAutomationPeer(NavigationViewItem owner) + : base(owner) + { + _owner = owner; + } + + protected override string GetClassNameCore() + { + return "NavigationItem"; + } + + protected override AutomationControlType GetAutomationControlTypeCore() + { + return AutomationControlType.TabItem; + } + + public override object GetPattern(PatternInterface patternInterface) + { + if (patternInterface == PatternInterface.ItemContainer) + { + return this; + } + + return base.GetPattern(patternInterface); + } + + protected override AutomationPeer GetLabeledByCore() + { + if (_owner.Content is UIElement element) + { + return CreatePeerForElement(element); + } + + return base.GetLabeledByCore(); + } + + protected override string GetNameCore() + { + var result = base.GetNameCore() ?? string.Empty; + + if (result == string.Empty) + { + result = AutomationProperties.GetName(_owner); + } + + if (result == string.Empty && _owner.Content is DependencyObject d) + { + result = AutomationProperties.GetName(d); + } + + if (result == string.Empty && _owner.Content is string s) + { + result = s; + } + + return result; + } +}