使用资源

时间:2016-02-12 09:49:44

标签: c# wpf datatemplate

在我的应用程序中,我有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>

但是我用这种方法得到了编译错误。

1 个答案:

答案 0 :(得分:0)

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

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