【问题标题】:ContentControl MouseDoubleClick event does not work when the content changes内容更改时,ContentControl MouseDoubleClick 事件不起作用
【发布时间】:2017-04-18 13:58:18
【问题描述】:

我有一个这样的数据模板:

    <!-- MULTI VIEW TEMPLATE -->
    <DataTemplate x:Key="MultiViewTemplate" >
        <Grid x:Name="MultiViewGrid" ShowGridLines="True" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <ContentControl Content="{StaticResource BorderHwnd1}" Grid.Column="0" Grid.Row="0" x:Name="MultiViewBorder1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MouseDoubleClick="MultiViewBorder1_MouseDoubleClick"/>
            <ContentControl Content="{StaticResource BorderHwnd2}" Grid.Column="1" Grid.Row="0" x:Name="MultiViewBorder2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MouseDoubleClick="MultiViewBorder2_MouseDoubleClick"/>
            <ContentControl Content="{StaticResource BorderHwnd3}" Grid.Column="0" Grid.Row="1" x:Name="MultiViewBorder3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MouseDoubleClick="MultiViewBorder3_MouseDoubleClick"/>
            <ContentControl Content="{StaticResource BorderHwnd4}" Grid.Column="1" Grid.Row="1" x:Name="MultiViewBorder4" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MouseDoubleClick="MultiViewBorder4_MouseDoubleClick"/>
        </Grid>
    </DataTemplate>

而 BorderHwnd1 是这样的:

    <Border x:Key="BorderHwnd1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderBrush="Transparent" BorderThickness="0" Background="Transparent" >
        <Image Margin="1" Source="/MyProject;component/Images/No_image_available.png" />
    </Border>

我的问题是 MultiViewBorder1_MouseDoubleClick 事件在我删除并以编程方式将新子项分配给 MultiViewBorder1 后不起作用。最初 MultiViewBorder1.Child 是一个图像 (No_image_available.png)。在我的代码中,我删除了图像并分配了一个新的孩子。这个新孩子是HwndHost

我的错误在哪里?任何帮助表示赞赏!

【问题讨论】:

  • 1. “MultiViewBorder1_MouseDoubleClick 事件不起作用”——“不起作用”到底是什么意思?例外?什么?请向我们展示处理程序并解释症状。 2. “在我以编程方式删除并分配一个新子项到 MultiViewBorder1 之后”——这句话几乎可以表示任何含义。向我们展示代码。 3. 您应该绑定 Content 而不是以编程方式设置它。
  • 一般来说,遵循这种形式是错误的:"这里有一些代码。没关系。其他一些代码中存在错误,我不会向您展示,但这里有一个令人难以置信的模糊地描述了我在写这篇文章时对自己想要完成的事情的感受。怎么了?”
  • MultiViewBorder1_MouseDoubleClick 事件不起作用 = MouseDoubleClick 事件未触发` private void onMouseDoubleClick(object sender, RoutedEventArgs e) { MessageBox.Show("Double Click"); }`

标签: c# .net wpf visual-studio


【解决方案1】:

孩子正在从一个 WPF Image 控件改变......它能够通过可视化树引发/流动“路由”“鼠标”事件......到你在里面的一些“hwnd” HwndHost,正在处理原始 WIN32 鼠标消息....并且不路由它们。

为了能够将 HwndHost 中的鼠标活动放入可视化树中,您可以使用几种不同的技术来路由它们。

  • 有一个叠加的“透明”窗口

  • 处理 WIN32/Hwnd 中的“鼠标”消息,然后使用“委托”进行提升

How can I convert Win32 mouse messages to WPF mouse events?

WPF WIN32 hwndhost WM_MOUSEMOVE WM_MOUSEHOVER

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多