是否有可能将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>

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

所以你在Visual Studio中创建一个新的资源字典,然后添加你的样式和相关的资源。例如:

<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>

这样你就可以从你的原始文件中引用新的样式(重要的是:你必须通过Key或Type来访问它)。
之后,你的原始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>

注意,你必须通过它的文件名来引用字典。

相关内容

最新更新