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