2016-12-06 78 views
0

有沒有可能使用XPath來識別正在運行的應用程序中的每個XAML元素?通過XPath識別和查找XAML樹中的元素

例如,如果我有以下XAML結構。

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

我想知道,例如第二個按鈕的XPath和我有它,我想以後檢索按鈕感謝的XPath。

我知道如果我有XmlDocument,我可以在沒有任何問題的情況下使用XPath,但是如果可能的話,我想用運行應用程序中的元素來實現相同的功能。

+0

你可以顯示你想寫的代碼嗎?不太清楚什麼「與運行應用程序中的元素相同的東西」的意思是...... –

+0

聽起來像一個非常痛苦的方式去。如果你想要從代碼隱藏中訪問控件,可以命名它們(x:Name =「someName」),然後根據它們的名稱訪問它們(Button btn =(Button)this.FindName(「someName 「);) – Asnivor

+0

@AlexeiLevenkov我的意思是當我點擊第二個按鈕時,我想獲得」/ Page/StackPanel/Button [index]「。之後感謝XPath表達式,我想找到按鈕。 –

回答

1

實際上沒有這樣的XAML結構來在運行時應用XPath。 XAML解析器將解析您的XAML標記並創建構成您在屏幕上看到的用戶界面的元素樹。

所以,如果你需要找到一個StackPanel的第二個按鈕一旦在運行時被構建您應該在StackPanel中的兒童收集直視:

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

...或使用VisualTreeHelper類在視覺樹中找到它:Find control in the visual tree