1
コードビハインドで、別の要素が使用している元のコントロールテンプレート内の名前付き要素の1つにアクセスしたいとします。 コードビハインドを使用してControlTemplateの名前付き要素にアクセスするにはどうすればよいですか?
この
は、XAMLコードの例である(当然、元はもっと複雑である、または私はXAMLでこれをやっていると思います):<Window x:Class="Temp.MainWindow" Title="MainWindow">
<Window.Resources>
<ControlTemplate x:Key="MyTemplate" TargetType="{x:Type Expander}">
<Expander Header="Some header">
<StackPanel>
<Grid Name="MyGrid"/>
</StackPanel>
</Expander>
</ControlTemplate>
</Window.Resources>
<Grid>
<Expander Name="expander" Template="{DynamicResource MyTemplate}"/>
</Grid>
</Window>
私が試したもの:
public MainWindow()
{
InitializeComponent();
Grid grid = expander.Template.FindName("MyGrid", expander) as Grid;
}
私はまた
Grid grid = expander.Template.Resources.FindName("MyGrid") as Grid;
しかしg
は常にnull
で試してみました。
私が見てきた:上記のリンクは、私は私が働いているコードを得た方法ですが、
- How do I access an element of a control template from within code behind?
- How to access a WPF control located in a ControlTemplate
- How do I programmatically interact with template-generated elements Part I
何らかの理由g
は、常にnull
です。 ContentTemplateに何か問題がありますか?どんな助けもありがとう!
ありがとうございましたが、動作しませんでした( 'grid'はまだ' null'です)。私はルックレスコントロールを調べますが、私はWPFをほとんど理解していないことを発見しました。私はそう思っていました。 一時的な修正として、テンプレートの使用を避け、同じコードを繰り返し使用することをお勧めします。 –
@Debraええ、それはあなたのせいではありません。すべてがうまくいっていくためには、必要なすべての訓練を受けるのに数年かかります。技術は少し混じり合っていますが、複雑なことをやり始めるとうまくいきません。 MVVMアーキテクチャーを学び、無意味なコントロールを構築する方法を学ぶことになるでしょう。あなたは自分自身に感謝し、最も多くのことよりも進んでいきます。 –