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

标签 c# wpf

当我向 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/

相关文章:

c# - WPF MVVM 更新源但不更新 GUI

c# - 我希望程序在数字为负数时关闭,但即使数字为正数它也会关闭

c# - 使用 Linq 每次迭代选择多个项目?

c# - 无法找到请求的 .Net Framework 数据提供程序。 (SQL客户端)

c# - 如何在 WPF 中使用 MVVM 实现过滤器框

c# - 在 WPF 中渲染清晰的线条

c# - 如何折叠 If、Else、For、Foreach 等子句?

c# - 从 HTML 源下载并保存图像

c# - 生成具有不同 'Content' 的单选按钮

C# WPF 图表工具包 : How to get independent-axis value from ColumnSeries in MouseRightButtonDown?