使用资源中的数据模板内容

本文关键字:数据 资源 | 更新日期: 2023-09-27 18:34:16

在我的应用程序中,我有一个HierarchicalDataTemplate,如下所示:

<HierarchicalDataTemplate DataType="{x:Type model:ParentDisplayTreeItem}" ItemsSource="{Binding Children}">
    <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        <CheckBox.Content>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="16"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Image Grid.Column="0" Source="{Binding Image}" VerticalAlignment="Center"/>
                <TextBlock Grid.Column="1" Text="{Binding Display}" VerticalAlignment="Center" Margin="2,1"/>
            </Grid>
        </CheckBox.Content>
    </CheckBox>
</HierarchicalDataTemplate>

还有一个看起来像这样的DataTemplate

<DataTemplate DataType="{x:Type model:ChildDisplayTreeItem}">
    <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        <CheckBox.Content>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="16"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Image Grid.Column="0" Source="{Binding Image}" VerticalAlignment="Center"/>
                <TextBlock Grid.Column="1" Text="{Binding Display}" VerticalAlignment="Center" Margin="2,1"/>
            </Grid>
        </CheckBox.Content>
    </CheckBox>
</DataTemplate>

如您所见,两者都具有相同的内容,并带有 CheckBox .

是否可以将CheckBox移动到资源并从那里使用它?

我已经尝试将其作为资源中的ControlTemplate提供,例如:

<ControlTemplate x:Key="CheckBoxControlTemplate">
    <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        <CheckBox.Content>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="16"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Image Grid.Column="0" Source="{Binding Image}" VerticalAlignment="Center"/>
                <TextBlock Grid.Column="1" Text="{Binding Display}" VerticalAlignment="Center" Margin="2,1"/>
            </Grid>
        </CheckBox.Content>
    </CheckBox>
</ControlTemplate>

并像这样使用它:

<HierarchicalDataTemplate DataType="{x:Type model:ParentDisplayTreeItem}" ItemsSource="{Binding Children}">
    <StaticResource ResourceKey="CheckBoxControlTemplate"/>
</HierarchicalDataTemplate>

但是这种方法出现编译错误。

使用资源中的数据模板内容

是的,你可以这样做。它应该看起来像这样。

<HierarchicalDataTemplate DataType="{x:Type model:ParentDisplayTreeItem}" 
                          ItemsSource="{Binding Children}">
    <CheckBox Template="{StaticResource CheckBoxControlTemplate}" />
</HierarchicalDataTemplate>