[英]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.