/
githubmirror
/
Files
Обзор
Документация
Войти
/
githubmirror
/
Files
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Files.App.Controls/Sidebar/SidebarItemAutomationPeer.cs
123 строки
3 KB
yair100
Feature: Replaced Settings Dialog with page (#18410)
23 апр 2026, 23:59
Не верифицирован
23 апр 2026, 23:59
65e4bf8
Код
Авторство
О чём код?
// Copyright (c) Files Community // Licensed under the MIT License. using CommunityToolkit.WinUI; using Microsoft.UI.Input; using Microsoft.UI.Xaml.Automation; using Microsoft.UI.Xaml.Automation.Peers; using Microsoft.UI.Xaml.Automation.Provider; namespace Files.App.Controls { /// <summary> /// Exposes <see cref="SidebarItem"/> types to Microsoft UI Automation. /// </summary> public sealed partial class SidebarItemAutomationPeer : FrameworkElementAutomationPeer, IInvokeProvider, IExpandCollapseProvider, ISelectionItemProvider { public ExpandCollapseState ExpandCollapseState { get { if (Owner.HasChildren) return Owner.IsExpanded ? ExpandCollapseState.Expanded : ExpandCollapseState.Collapsed; return ExpandCollapseState.LeafNode; } } public bool IsSelected => Owner.IsSelected; public IRawElementProviderSimple SelectionContainer => ProviderFromPeer(CreatePeerForElement(Owner.Owner)); private new SidebarItem Owner { get; init; } public SidebarItemAutomationPeer(SidebarItem owner) : base(owner) { Owner = owner; } protected override AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.ListItem; } protected override string GetNameCore() { return Owner?.Text ?? string.Empty; } protected override object GetPatternCore(PatternInterface patternInterface) { if (patternInterface == PatternInterface.Invoke || patternInterface == PatternInterface.SelectionItem) { return this; } else if (patternInterface == PatternInterface.ExpandCollapse) { if (Owner.CollapseEnabled) return this; } return base.GetPatternCore(patternInterface); } public void Collapse() { if (Owner.CollapseEnabled) Owner.IsExpanded = false; } public void Expand() { if (Owner.CollapseEnabled) Owner.IsExpanded = true; } public void Invoke() { Owner.RaiseItemInvoked(PointerUpdateKind.Other); } public void AddToSelection() { Owner.Select(); } public void RemoveFromSelection() { // Intentionally left blank } public void Select() { Owner.Select(); } protected override int GetSizeOfSetCore() { var baseValue = base.GetSizeOfSetCore(); if (baseValue != -1) return baseValue; return GetOwnerCollection().Count; } protected override int GetPositionInSetCore() { var baseValue = base.GetPositionInSetCore(); if (baseValue != -1) return baseValue; return GetOwnerCollection().IndexOf(Owner.DataContext) + 1; } private IList GetOwnerCollection() { if (Owner.FindAscendant<SidebarItem>() is SidebarItem parent && parent.Item?.Children is IList list) return list; if (Owner?.Owner is not null && Owner.Owner?.MenuItemsSource is IList items) return items; return new List<object>(); } } }