2011-01-24 36 views
5

次のようにGetTemplateChildを使用していますが、常にNULLを返します。これを修正するには?GetTemplateChildは常にnullを返します

[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))] 
textPoints = (TextBlock)GetTemplateChild("TextBlock"); 
+0

解決方法を見つけましたか? _Reed Copsey_の回答は、あなたが入力した情報に対して正しいですが、まだ動作していない場合は、おそらくエラーが含まれている可能性のあるコントロールテンプレートを投稿する可能性があります。 –

+1

私の経験上、 'FrameworkElement.OnApplyTemplate()'が呼び出される前に 'FrameworkElement.GetTemplateChild()'を呼び出すのは安全ではありません。コントロールをサブクラス化し、 'OnApplyTemplate()'をオーバーライドしてみてください。 – kevinarpe

答えて

4

GetTemplateChildパラメータ、ないタイプとして名前をとります。

<TextBlock Text="{Binding}" Foreground="Cyan" 
    x:Name="textPoints" 

取得するために、名前として代わりに"TextBlock""textPoints"を渡してみてください:あなたはどこから、いくつかの他のコントロールのテンプレート子を取得しようとしているよう

[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))] 
textPoints = (TextBlock)GetTemplateChild("textPoints"); 
+0

Thnaks、私は以下のコードで試しましたが、私は同じ結果(つまり、NULL)を取得します。textPoints =(TextBlock)GetTemplateChild( "textPoints");私は若干の痩身を見逃していますか – codematrix

+0

いいえ、以下のメソッドでは、パブリックオーバーライドはOnApplyTemplate()を無効にします。他のGetTemplateChildsが動作しています。私はこのTextBlockだけに問題があります。これはの一部です。この場合、GetTemplateChild()は動作しますか? – codematrix

2

が見えるあなたのXAMLは以下のように定義されているのでGetTemplateChildを呼び出していますか?

あなたのItemsControlがUserControl内にある場合、GetControlChildはUserControlの子がテンプレートの子の一部ではないため、動作しません。また、子のテンプレートの子をすべて再帰的に検索しません。

ほとんどのGetTemplateChildは、カスタムコントロールで使用されます。

+0

上記のコードを見ると、x:Name = "PointsList"では動作しますがx:Name = "textPoints"では動作しません。いくつかの光を投げることができますか? この場合、GetTemplateChild()は動作しますか? – codematrix

+0

GetTemplateChildは現在のテンプレートで名前付きの子のみを検索するため、GetTemplateChildはcurrnyテンプレート内にテキストボックスがありません。これはテンプレートの子テンプレート内にあります。 ItemsControlから派生した別のカスタムコントロールを作成する必要がありますが、コントロールがアイテムテンプレート内にある場合は、別のカスタムコントロールとしてアイテムコンテナも作成する必要があります。 –

+0

テンプレートの子は現在のコントロールのプライベート要素のようなものですが、親を所有するテンプレートのみがテンプレートの子にアクセスできますが、VisualTreeをナビゲートして子コントロールにアクセスできます。また、ItemsControlにはすべての項目に同じ名前のコントロールが多数あるため、GetTemplateChildはどの項目を返すのですか? –

関連する問題