WPF DataTemplate创建对象

时间:2016-03-25 16:50:20

标签: c# wpf datatemplate

我有一个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正确加载可见对象?

0 个答案:

没有答案