在 wpf 中使用 WindowsFormsHost 控件生成的鼠标事件的问题

The issue of mouse events generated by using the WindowsFormsHost control in wpf

提问人:rookie 提问时间:11/7/2023 最后编辑:rookie 更新时间:11/8/2023 访问量:31

问:

<Window x:Class="ARLargeScreen.MainWindow "
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="MainWindow"
        Loaded="MainWindow_Loaded"
        mc:Ignorable="d"
        Height="2160"
        Width="3860"
        ResizeMode="NoResize"
        WindowStyle="None"
        Background="#80BF7F11"
        MouseDoubleClick="Window_MouseDoubleClick">
    <Viewbox IsHitTestVisible="False">
        <ScrollViewer VerticalScrollBarVisibility="Hidden"
                      HorizontalScrollBarVisibility="Hidden"
                      Name="sv1">
            <Canvas x:Name="MainCanvas" 
                    Width="3860"
                    Height="2160"
                    Background="Transparent"  >
                <WindowsFormsHost x:Name="MyPictureBoxHost"
                                  Width="3860"
                                  Height="2160" IsHitTestVisible="False">
                    <wf:PictureBox x:Name="Me_MediaPlayer"
                               />
                </WindowsFormsHost>
            </Canvas>
        </ScrollViewer>
    </Viewbox>
</Window>

在上面窗体的 WindowsFormsHost 中,我必须使用 picturebox 控件来更新视频流,但这会导致窗体的窗口to_ 未触发 MouseDoubleClick 事件,并且未触发已重写的 OnMouseMove、OnMouseLeftButtonUp 和 OnPreviewMouseLeftButtonDown 事件

我在 WindowsFormsHost 上使用 IsHitTestVisible=“False” 方法来阻止此控件,但它不起作用

因为使用第三方控件只能使用 Picturebox 来呈现内容,所以我们只能使用 Picturebox。真的没有办法吗

C# .NET WPF WinForms XAML

评论

0赞 Mr. Squirrel.Downy 11/7/2023
WindowsFormsHost实际上在WPF窗口上新建了一个“无边框窗口”的顶部,并实时跟随控制位置,这意味着上面的所有鼠标操作都会被这个窗口“吃掉”,所以应该尝试使用winfrom event on。Me_MediaPlayer
0赞 Mr. Squirrel.Downy 11/7/2023
而且由于在wpf窗口的控制位置上有一个“新窗口”的顶部,所以设置肯定是没用的。WindowsFormsHostIsHitTestVisibleWindowsFormsHost
0赞 Mr. Squirrel.Downy 11/7/2023
另一种解决方案是处理视频流的每一帧,将它们转换为 WPF 媒体的 ImageSource,并在控制中显示它们以进行播放。Image
0赞 Clemens 11/7/2023
目前尚不清楚“我必须使用图片框控件来更新视频流”的确切含义。如果显示视频流的单个帧,则这些帧也可以显示在 Image 元素中。否则,请使用 MediaElement。
0赞 rookie 11/8/2023
谢谢。问题已解决,所有修改均已使用 Winform 事件代码进行

答: 暂无答案