【发布时间】:2021-01-24 19:20:15
【问题描述】:
我有一个 DataGrid 及其 RowStyle 在 XAML 中设置:
<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 恢复为原始样式。
为什么它不起作用?
【问题讨论】:
-
我认为您应该默认在触发器之外明确定义背景。