ItemContainerStyle中的WPF事件处理程序

时间:2015-09-22 09:25:13

标签: c# wpf

我有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
}

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

我做错了什么?

是否有其他方法可以处理此事件(右键单击一行)?

5 个答案:

答案 0 :(得分:1)

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

您需要 MouseEventArgs e 而不是 MouseButtonEventArgs e 。那是一个错字吗?如果没有,请改用MouseButtonEventArgs。

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

答案 1 :(得分:0)

我认为您需要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>

您还可以为右键单击

创建附加行为

答案 2 :(得分:0)

您可以尝试以下操作:

 <DataGrid ItemsSource="{Binding ...}">
            <DataGrid.Resources>
                <Style TargetType="{x:Type DataGridRow}">
                    <EventSetter Event="MouseRightButtonDown" Handler="Row_MouseRightButtonDown"/>
                </Style>
            </DataGrid.Resources>
        </DataGrid>

比你不需要ItemContainerStyle

答案 3 :(得分:0)

如上所述使用RoutedEventArgs!

{{1}}

答案 4 :(得分:0)

使用RowStyle代替ItemContainerStyle

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