2011-11-14 19 views
34

コンテンツコントロールのコントロールテンプレート内にあるユーザーコントロールにアクセスしようとしています。具体的には:コードビハインド内からコントロールテンプレートの要素にアクセスする方法

<ContentControl x:Name="MyList" > 
     <ContentControl.Template> 
      <ControlTemplate x:Name="MyControlTemplate"> 
       <Border RenderTransformOrigin="0,0" x:Name="border"> 
        <UserControls:MyControl x:Name="MyControlName" Width="100" ViewModel="{Binding}" /> 

this.MyListにアクセスできますが、this.MyControlNameが見つかりません。この状況でコードビハインドからMyControlNameオブジェクトにアクセスするにはどうすればよいですか?

ありがとうございます!

var template = MyList.Template; 
var myControl = (MyControl)template.FindName("MyControlName", MyList); 

テンプレートだけでは、次のとおりです:

+0

私はあなたが達成しようとしていることをむしろ説明する必要があると感じています。あなたが求めていることをする必要はないということです。 – flq

答えて

62

あなたは、のようなもののテンプレートを取得し、テンプレートコントロールに名前でコントロールを配置するために必要なテンプレートで、コントロールを作成するものの抽象記述をのみテンプレート化されているもののコンテキスト内に存在します。


テンプレートの元となった制御をオーサリングしている場合にのみ、これまでコントロールテンプレート内の要素にアクセスする必要があることに注意してください。外部からのアクセスは、バウンドプロパティとメソッドを使用して行う必要があります。

のデータテンプレートこれは似ています。あなたがアクセスする必要があるすべてのものは、オブジェクトにバインドされる必要があり、そのオブジェクトにアクセスする必要があります。これは、項目を仮想化する項目コントロールの場合に特に当てはまります。そのため、要素はほとんどの場合存在しません。

4

Uはまた、コントロールのLoadedイベントを追加してから、イベントの送信者を変数に割り当てることで、すべてのテンプレートからコントロールを取得できます。

+1

@Krythic、 "この"答え "の単純さはそれを作る..."この答えは、受け入れられた答えよりも簡単ではありません。これの横に、より単純な返答が悪くない方がいいです:) –

+0

私のコントロールは、スタイルとカスタムテンプレートのチェーンに深く埋もれていて、このイベントは私を助けました。ありがとうございました。 – grinder22

関連する問題