0

我最近开始学习/使用 AutomationPeer 类以及如何覆盖它的功能。我的一个问题是,是否有提取在 AutomationPeer 初始化期间传入的 UIElement。

一个例子:

public class MyRadMenuItemAutomationPeer : RadMenuItemAutomationPeer
{
    public MyRadMenuItemAutomationPeer(RadMenuItem owner)
      : base(owner)
    {

    }

    protected override List<AutomationPeer> GetChildrenCore()
    {
        //originalPeers at this point is a collection of RadMenuItemAutomationPeer
        var originalPeers = base.GetChildrenCore();
        
        //Id like to take each one of these Peers, and somehow cast them or 
        // create a new collection<MyRadMenuItemAutomationPeer> from the root
        // element in the original peer. I know there is the Owner property but
        // that is protected and not visible from the outside.

        var newPeers = 
             //What should be implemented here? An idea I had is something like:
             // originalPeers.Select(p => new MyRadMenuItemAutomationPeer(p.Element))
            //     .ToList(); where p.Element is the way to get the element

        //return newPeers Collection
        return newPeers;
    }

    protected override string GetNameCore()
    {
        //Logic to determing the name Property
        return nameValue;
    }
}
4

1 回答 1

0

上面Simon Mourier提出的解决方案效果很好。他将其作为子评论留下,因此我无法将其标记为答案。

许多从 AutomationPeer 派生的类都有一个 Owner 属性,通常对应于相关的“对象”。对于 UIElementAutomationPeer,所有者是相关的 UIElement。因此,您可以尝试将任何 AutomationPeer 转换为给定的派生类,并检查它。那是你要找的吗?

于 2014-05-28T17:50:09.947 回答