2016-12-06 31 views
0

実行中のアプリケーションで各XAML要素を識別するためにXPathを使用する可能性はありますか?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 2番目のボタンをクリックすると、「/ Page/StackPanel/Button [index]」になります。その後、XPath式のおかげでボタンを探しています。 –

答えて

1

実行時にXPathを適用するXAML構造は実際にはありません。 XAMLパーサは、XAMLマークアップを解析し、画面上に表示されるユーザーインターフェイスを構成する要素のツリーを作成します。

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

...かにVisualTreeHelperクラスを使用しますので、それは実行時に構築された後、あなたがのStackPanelのChildrenコレクションに直視しなければならないのいずれかのStackPanelにおける第二のボタンを見つける必要がある場合

視覚的なツリーでそれを見つける:Find control in the visual tree

関連する問題