首页 > 解决方案 > 是否可以将 DataGridCell 的样式移动到另一个单独的文件?

问题描述

如果我将样式直接放在绑定的 DataGridTextColumn 中,我可以访问绑定属性的值(在本例中为“Position”)。如果我将样式移动到单独的文件中,我将无法再访问该属性的值,但仍需要触发器。我怎样才能完成它?我试图在转换器中获取 DataGridCell 的绑定值,但它始终为空,就像转换器在数据绑定之前运行一样。

<DataGridTextColumn Binding="{Binding Path=Position}" Header="Position">
       <DataGridTextColumn.CellStyle>
             <Style TargetType="DataGridCell">
                  <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=Position,  Converter={StaticResource ValueToBooleanConverter}}" Value="True">
                        <Setter Property="Background" Value="Yellow"/>
                        </DataTrigger>
                  </Style.Triggers>
             </Style>
       </DataGridTextColumn.CellStyle>
 </DataGridTextColumn>

标签: c#wpfxaml

解决方案


我知道的唯一可以让您将 xaml 代码拆分为另一个文件的方法是使用ResourceDictionary.

因此,您在 Visual Studio 中创建一个新的资源字典,然后添加您的样式和相关资源。IE:

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:Test">

     <local:ValueToBooleanConverter x:Key="ValueToBooleanConverter" />

     <Style x:Key="CellStyle" TargetType="DataGridCell">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Position, Converter={StaticResource ValueToBooleanConverter}}" Value="True">
                <Setter Property="Background" Value="Yellow" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

这样您就可以从原始文件中引用新样式(重要提示:您必须通过键或类型来访问它)。
之后,您的原始 xaml 代码应类似于以下内容:

<Window.Resources>
    <ResourceDictionary Source="resdict.xaml" />
</Window.Resources>
<DataGrid ItemsSource="{Binding Items}">
    <DataGrid.Columns>
        <DataGridTextColumn
            Binding="{Binding Path=Position}"
            CellStyle="{StaticResource CellStyle}"
            Header="Position" />
    </DataGrid.Columns>
</DataGrid>

请注意,您必须通过文件名引用字典。


推荐阅读