gpt4 book ai didi

c# - 无法访问 GridViewColumn 的内容中的事件

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:54 27 4
gpt4 key购买 nike

当我向 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");
}

最佳答案

ListViewItemPreviewMouseDown 事件将始终在图像的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com