我們使用 AutomationUIClient 控制臺應(yīng)用程序來測試我們的 WPF 應(yīng)用程序。我們在 WPF 應(yīng)用程序中使用 ISelectionProvider 和 IExpandCollapseProvider 設(shè)置了一個自定義類 TreeItemAutomationPeer如果自動化應(yīng)用程序控制臺使用此對象,則保留所有者(在我的情況下為 TreeItem),因此它會泄漏...我們添加了最后一個方法 GetChildrenCore() 來防止 Children 的內(nèi)存泄漏。 public class TreeItemAutomationPeer : FrameworkElementAutomationPeer, ISelectionItemProvider, IExpandCollapseProvider{ private readonly TreeItem _treeItem; public TreeItemAutomationPeer(TreeItem treeItem) : base(treeItem) { _treeItem = treeItem; } public override object GetPattern(PatternInterface patternInterface) { if (patternInterface == PatternInterface.SelectionItem || patternInterface == PatternInterface.ExpandCollapse) return this; return base.GetPattern(patternInterface); } protected override string GetClassNameCore() { return "TreeItem"; } protected override AutomationControlType GetAutomationControlTypeCore() { //return AutomationControlType.Tree; return AutomationControlType.Custom; } #region ISelectionItemProvider public IRawElementProviderSimple SelectionContainer { get { return _treeItem.SelectionContainer; } } public bool IsSelected { get { return _treeItem.Item.IsSelected; } } public void AddToSelection() { _treeItem.Item.IsSelected = true; ItemHelper.SelectItem(_treeItem, _treeItem.Item); } public void RemoveFromSelection() { _treeItem.Item.IsSelected = false; } public void Select() { if (_treeItem.Item.IsSelected) RemoveFromSelection(); else AddToSelection(); } #endregion #region IExpandCollapseProvider public ExpandCollapseState ExpandCollapseState { get { return _treeItem.Item.IsExpanded ? ExpandCollapseState.Expanded : ExpandCollapseState.Collapsed; } }
C# 中帶有 IExpandCollapseProvider 的自定義
函數(shù)式編程
2021-07-08 18:33:26