【问题标题】:Identify and find element in XAML tree by XPath通过 XPath 识别和查找 XAML 树中的元素
【发布时间】:2016-12-06 16:28:31
【问题描述】:

是否有可能使用 XPath 来识别正在运行的应用程序中的每个 XAML 元素?

例如,如果我有以下 XAML 结构。

<Page>
    <StackPanel>
        <Button />
        <Button />
    </StackPanel>
</Page>

例如,我想知道第二个按钮的 XPath,当我拥有它后,我想通过 XPath 检索该按钮。

我知道如果我有 XmlDocument,我可以毫无问题地使用 XPath,但如果可能的话,我想用正在运行的应用程序中的元素来实现相同的东西。

【问题讨论】:

  • 你能展示你想写的代码吗?不太清楚“与正在运行的应用程序中的元素相同的东西”是什么意思......
  • 听起来很痛苦。如果您要从代码隐藏中访问控件,命名它们是有意义的 (x:Name="someName") 然后根据它们的名称访问它们( Button btn = (Button)this.FindName("someName ");)
  • @AlexeiLevenkov 我的意思是当我点击第二个按钮时,我想获得“/Page/StackPanel/Button[index]”。之后感谢 XPath 表达式,我想找到按钮。
  • @Asnivor 可能很痛苦,但是,我很好奇这是否可能(没有命名)。
  • 你可以......但我不相信有一个现有的实现。如果你真的想做一个 - 阅读 XPathNavigator,它旨在允许 XPath 在任意树上导航......但据我所知,这种方法从未成功 - 很难找到任何有用的示例/实现。

标签: c# wpf xaml xpath uwp


【解决方案1】:

实际上没有这样的 XAML 结构可以在运行时应用 XPath。 XAML 解析器将解析您的 XAML 标记并创建构成您在屏幕上看到的用户界面的元素树。

因此,如果您需要在 StackPanel 中找到在运行时构建的第二个按钮,您应该直接查看 StackPanel 的 Children 集合:

Button secondButton = sp.Children[1] as Button;

...或者使用 VisualTreeHelper 类在可视化树中找到它:Find control in the visual tree

【讨论】:

    猜你喜欢
    • 2020-05-03
    • 2020-06-20
    • 2020-07-20
    • 2016-03-12
    • 2017-09-14
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    相关资源
    最近更新 更多