c# - 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
到原始样式。
为什么它不起作用?
解决方案
我的错误: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;
}
我把它作为问答留了下来,因为我花了一些时间来整理如何更改代码中的样式,我希望这对其他人有用。
推荐阅读
- python - 选择带有 python 请求的 href 链接
- security - Windows 是否具有类似于 Linux 的(进程、网络、文件系统)容器功能?(没有 Docker)
- plotly - 如何使用闪亮的应用程序在一张图片中显示两个不同的变量
- makefile - Makefile - 使用 LaTeX 生成 pdf
- android - 如何在 linux 终端中使用 Android SDK 的 cli 工具?
- javascript - 如何在没有内联脚本的情况下异步加载 CSS(遵守 CSP)
- javascript - 如何使用 useFormikContext() 知道该字段为空
- javascript - 如何使用 uniqueID 排列对象的值
- spring - 将 RepositoryItemWriter 与 AbstractRoutingDataSource 一起使用时,实体不会持久化
- azure - 链接服务连接超时