当我向 ListViewItem
添加事件时,
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewMouseDown" Handler="listViewItem_MouseDown" />
</Style>
然后在GridViewColumn
里面的内容中再添加一个事件,
<GridViewColumn Header="Action">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image x:Name="imgEdit"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Width="40"
Height="40"
Tag="{Binding ProductBarcode}"
Cursor="Hand"
MouseDown="img_MouseDown">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="/Resources/edit_button.png" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source" Value="/Resources/edit_button_hovered.png" />
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我无法在 Image
控件中触发事件。触发的是 ListViewItem
中的事件。如何访问Image
控件中的事件?
事件如下:
private void img_MouseDown(object sender, MouseButtonEventArgs e)
{
switch ((sender as Image).Name)
{
case "imgEdit":
MessageBox.Show("EDIT");
break;
default:
break;
}
}
private void listViewItem_MouseDown(object sender, RoutedEventArgs e)
{
MessageBox.Show("ROW CLICKED");
}
最佳答案
ListViewItem
的 PreviewMouseDown
事件将始终在图像的 MouseDown
事件之前引发。这是路由事件的工作方式:https://msdn.microsoft.com/en-us/library/ms742806(v=vs.110).aspx . PreviewMouseDown
是一个隧道事件,MouseDown
是一个冒泡事件。
如果您不想在单击 Image
时处理 PreviewMouseDown
事件,您可以检查 OriginalSource
的类型RoutedEventArgs
如果是 Image
则立即从事件处理程序返回:
private void listViewItem_MouseDown(object sender, RoutedEventArgs e)
{
if (e.OriginalSource is Image)
return; // do nothing
MessageBox.Show("ROW CLICKED");
}
关于c# - 无法访问 GridViewColumn 的内容中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43581841/