使用资源中的数据模板内容
本文关键字:数据 资源 | 更新日期: 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>