重用DataGridCell样式定义为静态资源

时间:2014-07-06 14:07:08

标签: wpf datagrid wpf-style

我的application.xaml中有以下静态资源:

<Style x:Key="SummaryCell" TargetType="DataGridCell">
    <Setter Property="Background" Value="LightSteelBlue" />
    <Setter Property="FontWeight" Value="Bold" />
    <Setter Property="HorizontalAlignment" Value="Center" />
</Style>

如果IsSummary为真,我想将它应用于数据网格中的每个单元格。我(天真地)尝试了以下方法:

<DataGrid>
    <DataGrid.CellStyle>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsSummary}" Value="True">
                    <Setter Property="Style" Value="{StaticResource SummaryCell}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>
</DataGrid>

我在运行时遇到以下错误:

  

不允许样式对象影响它所适用的对象的Style属性。

这是有道理的,因为数据触发器正在设置单元格的样式,这显然也是Datagrid.CellStyle属性正在做的事情。

如何在触发器中重用静态资源,或者我可以使用其他方法来执行此操作?

1 个答案:

答案 0 :(得分:1)

错误在这里非常有意义。不过,我可以建议一个解决方法是 将ContentGtrol中的DataGrid包装起来并在其ControlTemplate上应用触发器

<ContentControl>
    <ContentControl.Template>
        <ControlTemplate>
            <DataGrid x:Name="dataGrid"/>
            <ControlTemplate.Triggers>
                <DataTrigger Binding="{Binding IsSummary}" Value="True">
                    <Setter TargetName="dataGrid" Property="DataGrid.CellStyle"
                            Value="{StaticResource SummaryCell}" />
                </DataTrigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </ContentControl.Template>
</ContentControl>