我有一个精心设计的自定义控件,它可以根据ContentTemplate创建的控件类型更改分析其内容的方式。(供其他人使用),因此Template.FindName不会像本例中那样工作:Microsoft Learn .我在搜索中没有找到可用的答案,因为所有结果都指向链接示例中的解决方案。使用VisualTreehelper意味着知道模板包含什么,所以这不是我们的想法。
以这个ContentTemplate为例,我需要获得ListBox的示例。
<DataTemplate x:Key="MyKey">
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding X}" />
<TextBlock Text="{Binding Y}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
字符串
任何想法?
1条答案
按热度按时间ki1q1bka1#
多亏了对这个问题的评论和this Post的推动,我成功地解决了这个问题:
ContentPresenter的直接可视子对象是ContentControl的第一个子对象,这正是我一直在寻找的。
我重写了OnApplytemplate来实现我的目标,正如Post所示,出于我不清楚的原因,ContentPresenter必须依次应用其Template,否则它将保持为空。
ContentTemplate.LoadContent()也很有用,但是它提供了一个不同的示例,所以它只在你需要Type的时候才有用。