我一直在尝试为WPF DataGrid进行单击编辑,我已经在stackoverflow上查看了很多解决方案,但还有一个尚未解决的附加用例。我需要设置一个样式触发器,但我需要它不要一直将IsEditing设置为true。我需要它基于第二个条件。我遇到的问题是每个单元只能运行一次。
以下是几乎的XAML。
<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
<Condition Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.IsEditing}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEditing" Value="true" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
这个问题是每个单元只能运行一次。现在,如果我将第一个条件更改为基于IsFocused,则它始终有效。问题是我无法点击单元格内的文本框,原因很明显。我真的不知道为什么IsSelected每个单元只能工作一次。顺便说一句,如果我将视图从编辑模式中取出并使用同样位于视图上的按钮将其重新设置,它将再次工作...每个单元格一次。
有没有人知道为什么会发生这种奇怪的行为?
答案 0 :(得分:0)
确定。我不明白为什么IsSelected不起作用,但我找到了一个有效的属性,让我输入单元格的文本框。诀窍是使用IsKeyboardFocusWithin属性。这是完整的解决方案,按预期工作:
<DataGrid.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsKeyboardFocusWithin}" Value="True" />
<Condition Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.IsEditing}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEditing" Value="true" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>