繁体   English   中英

ItemContainerStyle中的WPF事件处理程序

[英]WPF event handler in ItemContainerStyle

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

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

我做错了什么?

还有另一种处理此事件的方法(右键单击行)?

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM