我有一个DataTemplate,如下所示:
<DataTemplate x:Key="MyTemplate">
<DataTemplate.Resources>
<!-- ...Styles... -->
</DataTemplate.Resources>
<Border Style="{StaticResource MyBorderStyle}">
<Grid Style="{StaticResource MyGridStyle}">
<Grid.Resources>
<DataTemplate DataType="{x:Type Type1}">
<Label>
<!-- ... -->
</Label>
</DataTemplate>
<DataTemplate DataType="{x:Type Type2}">
<Label>
<!-- ... some other Settings as above -->
</Label>
</DataTemplate>
</Grid.Resources>
<ContentPresenter Content="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</Grid>
</Border>
</DataTemplate>
现在在代码中我想使用此数据模板创建可见对象。我尝试了以下方法:
Type1 object1 = new Type1();
DataTemplate template = myDataTemplateFromAbove;
FrameworkElement visibleElement = template.loadContent() as FrameworkElement;
visibleElement.DataContext = object1;
visibleElement
已加载,我可以看到使用VisualTreeHelper.GetChild(visibleElement, i)
的儿童。它看起来如下:
- Border
- Grid
- ContentPresenter
正如您所看到的,它不会加载基于条件的模板(Label)的实际内容。尽管网格已加载资源(我可以在调试器中看到它们),但它们不会应用于对象。
那么如何使用DataTemplate并基于DataContext正确加载可见对象?