次のようにGetTemplateChildを使用していますが、常にNULLを返します。これを修正するには?GetTemplateChildは常にnullを返します
[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))]
textPoints = (TextBlock)GetTemplateChild("TextBlock");
次のようにGetTemplateChildを使用していますが、常にNULLを返します。これを修正するには?GetTemplateChildは常にnullを返します
[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))]
textPoints = (TextBlock)GetTemplateChild("TextBlock");
GetTemplateChildパラメータ、ないタイプとして名前をとります。
<TextBlock Text="{Binding}" Foreground="Cyan"
x:Name="textPoints"
取得するために、名前として代わりに"TextBlock"
の"textPoints"
を渡してみてください:あなたはどこから、いくつかの他のコントロールのテンプレート子を取得しようとしているよう
[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))]
textPoints = (TextBlock)GetTemplateChild("textPoints");
Thnaks、私は以下のコードで試しましたが、私は同じ結果(つまり、NULL)を取得します。textPoints =(TextBlock)GetTemplateChild( "textPoints");私は若干の痩身を見逃していますか – codematrix
いいえ、以下のメソッドでは、パブリックオーバーライドはOnApplyTemplate()を無効にします。他のGetTemplateChildsが動作しています。私はこのTextBlockだけに問題があります。これは
が見えるあなたのXAMLは以下のように定義されているのでGetTemplateChildを呼び出していますか?
あなたのItemsControlがUserControl内にある場合、GetControlChildはUserControlの子がテンプレートの子の一部ではないため、動作しません。また、子のテンプレートの子をすべて再帰的に検索しません。
ほとんどのGetTemplateChildは、カスタムコントロールで使用されます。
上記のコードを見ると、x:Name = "PointsList"では動作しますがx:Name = "textPoints"では動作しません。いくつかの光を投げることができますか? この場合、GetTemplateChild()は動作しますか? – codematrix
GetTemplateChildは現在のテンプレートで名前付きの子のみを検索するため、GetTemplateChildはcurrnyテンプレート内にテキストボックスがありません。これはテンプレートの子テンプレート内にあります。 ItemsControlから派生した別のカスタムコントロールを作成する必要がありますが、コントロールがアイテムテンプレート内にある場合は、別のカスタムコントロールとしてアイテムコンテナも作成する必要があります。 –
テンプレートの子は現在のコントロールのプライベート要素のようなものですが、親を所有するテンプレートのみがテンプレートの子にアクセスできますが、VisualTreeをナビゲートして子コントロールにアクセスできます。また、ItemsControlにはすべての項目に同じ名前のコントロールが多数あるため、GetTemplateChildはどの項目を返すのですか? –
解決方法を見つけましたか? _Reed Copsey_の回答は、あなたが入力した情報に対して正しいですが、まだ動作していない場合は、おそらくエラーが含まれている可能性のあるコントロールテンプレートを投稿する可能性があります。 –
私の経験上、 'FrameworkElement.OnApplyTemplate()'が呼び出される前に 'FrameworkElement.GetTemplateChild()'を呼び出すのは安全ではありません。コントロールをサブクラス化し、 'OnApplyTemplate()'をオーバーライドしてみてください。 – kevinarpe