ItemContainerStyle中的WPF事件处理程序

本文关键字:程序 事件处理 WPF 中的 ItemContainerStyle | 更新日期: 2023-09-27 18:13:50

我有DataGrid

<DataGrid x:Name="EFDataGrid"
          Visibility="Hidden"
          AutoGenerateColumns="False"
          ItemsSource="{Binding Path=ExchangeFile}"
          SelectionMode="Single"
          CanUserAddRows="False"
          CanUserDeleteRows="False"
          CanUserReorderColumns="False"
          CanUserResizeRows="False"
          CanUserSortColumns="False">
    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseRightButtonDown"
                         Handler="Row_MouseRightButtonDown" />
        </Style>
    </DataGrid.ItemContainerStyle>
    <DataGrid.Columns>some columns</DataGrid.Columns>
</DataGrid>

后面的处理程序
private void Row_MouseRightButtonDown(object sender, MouseEventArgs e)
{
    some methods
}

但是当我右键单击一行时,事件处理程序不执行。

我做错了什么?

是否有另一种方法来处理此事件(右键单击一行)?

ItemContainerStyle中的WPF事件处理程序

void Row_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    some methods
}

你写MouseEventArgs e而不是MouseButtonEventArgs e。是打错字了吗?如果没有,使用MouseButtonEventArgs。

MouseEventArgs用于MouseLeave, MouseMove等。MouseButtonEventArgs用于MouseRightButtonDown, MouseRightButtonUp等

我认为你需要RoutedEventArgs而不是MouseEventArgs

private void Row_MouseRightButtonDown(object sender, RoutedEventArgs e)
{
    //Some Method
}

,你应该在DataCell而不是DataGridRow上创建事件

<Style TargetType="EFDataGrid:DataCell">
    <EventSetter Event="MouseRightButtonDown" Handler="Row_MouseRightButtonDown"/>
</Style>

还可以创建一个附加行为用于右键单击

您可以尝试以下操作:

 <DataGrid ItemsSource="{Binding ...}">
            <DataGrid.Resources>
                <Style TargetType="{x:Type DataGridRow}">
                    <EventSetter Event="MouseRightButtonDown" Handler="Row_MouseRightButtonDown"/>
                </Style>
            </DataGrid.Resources>
        </DataGrid>
那么你就不需要ItemContainerStyle

使用如上所述的RoutedEventArgs !

   private void Row_MouseRightButtonDow(object sender, RoutedEventArgs e)
{
    do stuff
}

RowStyle代替ItemContainerStyle解决:

<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <EventSetter Event="MouseRightButtonDown" Handler="Row_MouseRightButtonDown" />
    </Style>
</DataGrid.RowStyle>