嗨,我有一个包含一些行的DataGrid,现在当我选择一行时,我想同时触发该选择的事件,但是我遇到了问题。
这是我的用户控制资源:
<UserControl.Resources>
<Style x:Key="CollapsedRow" TargetType="{x:Type DataGridRow}">
<EventSetter Event="MouseLeftButtonDown" Handler="OnGroupChange" />
<Setter Property="DetailsVisibility" Value="Collapsed" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="DodgerBlue" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="SteelBlue"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources
我的datagrid xaml很简单:
<DataGrid RowStyle="{StaticResource CollapsedRow}" AutoGenerateColumns="false" CanUserAddRows="false" ItemsSource="{Binding Applications}" >
如您所见,我为单击鼠标设置了一个事件设置器,它将触发事件并触发,如果选中该事件将更改行的背景色。但是它的工作方式就像首先您需要选择要单击的行,然后触发第二次单击的事件。一键就能做到吗?
答案 0 :(得分:1)
在更改行的选择之前,将触发MouseLeftButtonDown事件。这意味着您行的属性IsSelected
将是false
。您可以使用Selected事件,该事件在更改选择后会触发。只需添加一个新的处理程序,例如
<EventSetter Event="Selected" Handler="OnSelected"/>
和
private void OnSelected(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Column selection change, IsSelected = " + ((DataGridRow)sender).IsSelected);
}