我有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
}
但是当我右键单击一行时,事件处理程序不会执行。
我做错了什么?
是否有其他方法可以处理此事件(右键单击一行)?
答案 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>