gpt4 book ai didi

wpf - 如何将样式绑定(bind)到具有样式元素的任何数据上下文的属性?

转载 作者:行者123 更新时间:2023-12-01 11:53:28 25 4
gpt4 key购买 nike

我在样式触发器中有一个数据触发器,如下所示

<Style TargetType="DataGridCell" x:Key="ChangeAnimation" >
<Style.Triggers>
<DataTrigger Binding="{Binding Path=APropertyOfTheDataGridCellContext Bind DataContext}" Value="True" >
...
</DataTrigger>
</Style.Triggers>
</Style>

我将使用属性 CellStyle 将此样式应用于某些 DataGridColumns。我想要的是将样式的 DataTrigger 绑定(bind)到单元格数据上下文的属性,这样我就可以在所有必需的列上使用此样式,而不必为每列创建一个新样式。这可能吗?

提前致谢。

编辑:为了澄清,DataGrid 的 DataContext 是一个 ViewModel,它有一个名为 Rows 的属性,而 Rows 有一个名为 Cells 的属性,还有一个名为 Blink 的属性。我想像这样引用样式中的属性:
<DataGrid.Resources>
<Style TargetType="DataGridCell" x:Key="ChangeAnimation" >
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Blink}" Value="True" >
...
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>

这给了我一个错误,DataGridResources 数据上下文是包含行而不是单元格的那个。如何从样式中引用 DataGridCell DataContext?

最佳答案

删除 x:Key属性然后将应用于所有列。

<Style TargetType="{x:Type DataGridCell}"> 
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.MyProperty,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridCell}}}" Value="True" />
</Style.Triggers>
</Style>
如果您有 2 个 DataGrid,那么您应该在 Resources 中保留此样式。您要修改的 dataGrid 的标记...
如果 RelativeSource 不起作用,我更愿意通过触发器更改列的模板以实现类似的行为
为列编写触发器
<WpfToolkit:DataGridTemplateColumn MinWidth="50"
MaxWidth="80"
Header="MyHeader"
IsReadOnly="True">
<WpfToolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate.Resources>
<DataTemplate x:Key="normalTemplate" />
<DataTemplate x:Key="ChangeTempalte">
<!-Your Controls->
</DataTemplate>
</DataTemplate.Resources>
<ContentPresenter x:Name="chnagedField"
Content="{Binding}"
ContentTemplate="{StaticResource ResourceKey=normalTemplate}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
<Setter TargetName="EditableField" Property="ContentTemplate" Value="{StaticResource ResourceKey=chnageTempalte}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</WpfToolkit:DataGridTemplateColumn.CellTemplate>
</WpfToolkit:DataGridTemplateColumn>
这里 MyPropertyDataContext 的属性的 DataGridRow所以你可以选择任何级别的嵌套属性哟比较那个特定的行......唯一的缺点是你必须为所有需要这个的列执行此操作
我希望它有帮助

关于wpf - 如何将样式绑定(bind)到具有样式元素的任何数据上下文的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9359465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com