.net 如何查找ControlTemplate-Generated元素-FindName()排除

qybjjes1  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(120)

我有一个精心设计的自定义控件,它可以根据ContentTemplate创建的控件类型更改分析其内容的方式。(供其他人使用),因此Template.FindName不会像本例中那样工作:Microsoft Learn .我在搜索中没有找到可用的答案,因为所有结果都指向链接示例中的解决方案。使用VisualTreehelper意味着知道模板包含什么,所以这不是我们的想法。
以这个ContentTemplate为例,我需要获得ListBox的示例。

  1. <DataTemplate x:Key="MyKey">
  2. <ListBox>
  3. <ListBox.ItemTemplate>
  4. <DataTemplate>
  5. <StackPanel Orientation="Horizontal">
  6. <TextBlock Text="{Binding X}" />
  7. <TextBlock Text="{Binding Y}" />
  8. </StackPanel>
  9. </DataTemplate>
  10. </ListBox.ItemTemplate>
  11. </ListBox>

字符串
任何想法?

ki1q1bka

ki1q1bka1#

多亏了对这个问题的评论和this Post的推动,我成功地解决了这个问题:
ContentPresenter的直接可视子对象是ContentControl的第一个子对象,这正是我一直在寻找的。
我重写了OnApplytemplate来实现我的目标,正如Post所示,出于我不清楚的原因,ContentPresenter必须依次应用其Template,否则它将保持为空。
ContentTemplate.LoadContent()也很有用,但是它提供了一个不同的示例,所以它只在你需要Type的时候才有用。

相关问题