2

我的 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 对象不允许影响其应用对象的 Style 属性。

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

如何在触发器中重用静态资源,或者我可以使用什么其他方法来做到这一点?

4

1 回答 1

1

错误在这里非常有意义。不过,我可以在这里建议一种解决方法是将 DataGrid 包装在 ContentControl 中并在其 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>
于 2014-07-06T14:15:59.107 回答