我正在尝试在DataTrigger中使用WPF复选框的IsChecked属性。基于我设置特定DataGridRow背景的值。
我的工作代码
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="LightGray" />
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=chkbox, Path=IsChecked}" Value="true">
<Setter Property="Background" Value="LightCyan" />
</DataTrigger>
</Style.Triggers>
</Style>
<DataGrid x:Name="dataGrid1" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn MinWidth="40" Width="Auto" Header="Select">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="chkbox" IsChecked="{Binding Selected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
然后我检查了这个link并更改了以下代码并且工作正常。这里已选择是我的公共财产。
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="LightGray" />
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Selected}" Value="true">
<Setter Property="Background" Value="LightCyan" />
</DataTrigger>
</Style.Triggers>
</Style>
请帮助我理解为什么我的原始代码不起作用?我错过了什么。
谷歌没有帮助。令人惊讶的是,SO上也没有线索!谢谢你的帮助。
答案 0 :(得分:3)
原始代码无法正常工作,因为您试图通过ElementName
找到一个对象,该对象作为模板化对象存在,因此在之后绑定尝试时才会创建解决。通常,在引用可视树中的祖先对象时,您应该只使用ElementName
,而不是儿童,尤其是模板化的孩子。
正如评论中所述,此处也无法使用{RelativeSource FindAncestor...
绑定,因为CheckBox
是DataGridRow