2011-07-21 22 views
1
<Style x:Key="abc" TargetType="{x:Type Window}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Window}"> 
       <button x:name="btn">my button!!</button> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
... 
<Window ... Style="{StaticResource styleMainWindow}"> 

ボタンを使用するにはどうすればいいですか?btnテンプレートでコントロールを使用するにはどうすればいいですか?

があなたの期待に来て、

MessageBox.Show(this.btn1.name); 

は、コンパイル時にエラーが発生しました。また、btn1はintelisenseに現れなかった。

+0

無意味なコントロールまたはUserControlを作成しようとしていますか?ありがとう。 –

答えて

1

ControlTemplateクラスのFindNameメソッドを試してください。

このと仮定すると、あなたのコントロールのコンテキストである:私はmjk6026推測

var button = (Button)this.Template.FindName("btn", this); 
+0

ありがとう。私の無知には恥ずかしいです。ありがとうございます。 – mjk6026

0

、あなたは窓の実際のメンバー要素からWPFテンプレートを誤解しています。

テンプレートの一部ではないUI要素(x:Name)に名前を付けると、コードビハインドの名前でその要素にアクセスできます。

テンプレートの場合、テンプレートタイプのFindName()メソッドを使用する必要があります。だから、

が私をしてみましょう(ボタン)this.Template.FindName( 『BTN』、この) `これはあなたは自分のスタイルを適用したのは、ウィンドウを意味し、あなたがボタンにアクセスすることができる方法があると仮定し

これがあなたの質問に答えるかどうかを知る...

+0

私は新しい質問を考えています。 [1。ウィンドウのxamlコードから直接追加したボタン 'btn'。] [2。テンプレートから追加したボタン 'btn'。 (このテンプレートを適用したウィンドウ)] no.1は次のようにアクセスできます:debug.writeline(this.btn.name); 2番はできません。 これは何が違うのですか? – mjk6026

+0

@ mjk6026、はい、このテンプレートを使用してウィンドウに直接追加された要素はthis.btnを使ってアクセスできます。テンプレートは、ビジュアルツリーの一部として実行時に読み込まれるプレースホルダーファクトリUIです。デザイン時にテンプレートを設定することはできますが、実行時にのみ有効です。そのシンボル\要素の部分は実行時に解決されるので、名前が付けられているかどうかにかかわらず、 "this"の一部としてアクセスすることはできません。その名前はテンプレートのローカルスコープであり、ウィンドウのレベルには適用されません。あなたの質問に答えることを願っています。 –

関連する問題