c# - 是否可以将 DataGridCell 的样式移动到另一个单独的文件?
问题描述
如果我将样式直接放在绑定的 DataGridTextColumn 中,我可以访问绑定属性的值(在本例中为“Position”)。如果我将样式移动到单独的文件中,我将无法再访问该属性的值,但仍需要触发器。我怎样才能完成它?我试图在转换器中获取 DataGridCell 的绑定值,但它始终为空,就像转换器在数据绑定之前运行一样。
<DataGridTextColumn Binding="{Binding Path=Position}" Header="Position">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Position, Converter={StaticResource ValueToBooleanConverter}}" Value="True">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
解决方案
我知道的唯一可以让您将 xaml 代码拆分为另一个文件的方法是使用ResourceDictionary
.
因此,您在 Visual Studio 中创建一个新的资源字典,然后添加您的样式和相关资源。IE:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test">
<local:ValueToBooleanConverter x:Key="ValueToBooleanConverter" />
<Style x:Key="CellStyle" TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Position, Converter={StaticResource ValueToBooleanConverter}}" Value="True">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
这样您就可以从原始文件中引用新样式(重要提示:您必须通过键或类型来访问它)。
之后,您的原始 xaml 代码应类似于以下内容:
<Window.Resources>
<ResourceDictionary Source="resdict.xaml" />
</Window.Resources>
<DataGrid ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Path=Position}"
CellStyle="{StaticResource CellStyle}"
Header="Position" />
</DataGrid.Columns>
</DataGrid>
请注意,您必须通过文件名引用字典。
推荐阅读
- pandas - 将日期标题后跟 AM 和 PM 时间单元格转换为整个时间戳列
- python - 转换为时间戳并返回更改原始时间 - Python Pandas
- arrays - 如何在不遍历整个事物的情况下迭代稀疏数组
- java - 当同一个类中有一个空的构造函数时,是否会绕过带有 args 的构造函数?
- python - 如何使用具有多行平均值的 fillna()?
- ios - 在 Xcode 12.4 中更新领域对象
- python - 谷歌 colab 连接到 IB
- java - 无法在 Kubernetes 上的 Eureka 注册表上注册微服务
- javascript - 路由器功能 - 'beforeEnter' 从 vuex 获取默认值
- android - Android MongoDB Realm:跳过了 28 帧!应用程序可能在其主线程上做了太多工作