首页 > 解决方案 > WPF 中 DataGrid 行的代码中的替代样式

问题描述

我在 XAML 中设置了DataGrid一个:RowStyle

<DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}">
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Style.Triggers>
            <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                <Setter Property="Background" Value="LightSteelBlue"/>
            </Trigger>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="Aquamarine"/>
                <Setter Property="Foreground" Value="Black"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>

包含我希望在选择该DataGrid行时打印的行详细信息。但是,我需要在打印时将行的背景颜色(包括其行详细信息)从 Aquamarine 更改为 White,然后在打印后再次返回。我有以下方法来实现这一点:

private void ChangeStyle(bool printing)
{
    Style rsRowStyle = new Style();
    Style oldStyle = dgdCustomersListing.RowStyle;
    Trigger DataTrigger = new Trigger();
    DataTrigger.Property = DataGridRow.IsSelectedProperty;
    DataTrigger.Value = true;
    rsRowStyle.Triggers.Add(DataTrigger);
    Setter TriggerSetter = new Setter();
    TriggerSetter.Property = DataGridRow.BackgroundProperty;
    TriggerSetter.Value = Brushes.LightGray;
    rsRowStyle.Setters.Add(TriggerSetter);
    dgdCustomersListing.RowStyle = printing ? rsRowStyle : oldStyle;
}

这在第一次调用打印时工作正常(行背景转换为白色),但再次调用该方法时printing无法false恢复DataGrid到原始样式。

为什么它不起作用?

标签: c#wpfxamldatagrid

解决方案


我的错误:oldStyle首先调用打印方法时需要进行赋值,然后将该值传递给该ChangeStyle方法,以便该方法不会更改它。因此:

private void ChangeStyle(bool printing, Style oldStyle)
{
    Style rsRowStyle = new Style();
    Trigger DataTrigger = new Trigger();
    DataTrigger.Property = DataGridRow.IsSelectedProperty;
    DataTrigger.Value = true;
    rsRowStyle.Triggers.Add(DataTrigger);
    Setter TriggerSetter = new Setter();
    TriggerSetter.Property = DataGridRow.BackgroundProperty;
    TriggerSetter.Value = Brushes.LightGray;
    rsRowStyle.Setters.Add(TriggerSetter);
    dgdCustomersListing.RowStyle = printing ? rsRowStyle : oldStyle;
}

我把它作为问答留了下来,因为我花了一些时间来整理如何更改代码中的样式,我希望这对其他人有用。


推荐阅读