none
wpf调用winform控件 wpf控件被覆盖 RRS feed

  • 问题

  • 我想用wpf做视频界面,别人做功能,由于我要调用别人的DLL需要句柄,所以添加了winform控件,将winform控件的句柄传入DLL中,视频能正常播放,但问题出来了,此时我wpf的菜单控件显示在视频上时会不停的闪,有没有碰过类似问题的朋友,有没有什么好的解决方法!!!
    2011年3月3日 3:20

答案

  • 你好 Jaon_Li,

    我觉得这个是因为WinformControl Render到 WPF Control 的最上面的缘故,然后你的菜单显示在上面的时候可能会出现闪烁的情况。

    因为WPF和Winform本来绘制的方式就是不同的,如果你要将让这两种技术进行交互的话,不如单纯使用WPF的control,比如用WPF的MediaElement就不会出现你说的情况,参考代码如下:

    <DockPanel>

        <Menu DockPanel.Dock="Top" Height="22" Name="menu1"  HorizontalAlignment="Stretch" VerticalAlignment="Top" Background="Aqua" BorderThickness="2">

            <Menu.BitmapEffect>

                <DropShadowBitmapEffect />

            </Menu.BitmapEffect>

            <MenuItem  Header="_File">

                <MenuItem Header="_Open" IsCheckable="true"/>

                <MenuItem Header="_Close" IsCheckable="true"/>

                <MenuItem Header="_Save" IsCheckable="true"/>

            </MenuItem>

        </Menu>

        <MediaElement Source="C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"  Stretch="Fill"/>

    </DockPanel>

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Jaon_Li 2011年3月3日 6:10
    2011年3月3日 5:44
    版主

全部回复

  • 你好 Jaon_Li,

    我觉得这个是因为WinformControl Render到 WPF Control 的最上面的缘故,然后你的菜单显示在上面的时候可能会出现闪烁的情况。

    因为WPF和Winform本来绘制的方式就是不同的,如果你要将让这两种技术进行交互的话,不如单纯使用WPF的control,比如用WPF的MediaElement就不会出现你说的情况,参考代码如下:

    <DockPanel>

        <Menu DockPanel.Dock="Top" Height="22" Name="menu1"  HorizontalAlignment="Stretch" VerticalAlignment="Top" Background="Aqua" BorderThickness="2">

            <Menu.BitmapEffect>

                <DropShadowBitmapEffect />

            </Menu.BitmapEffect>

            <MenuItem  Header="_File">

                <MenuItem Header="_Open" IsCheckable="true"/>

                <MenuItem Header="_Close" IsCheckable="true"/>

                <MenuItem Header="_Save" IsCheckable="true"/>

            </MenuItem>

        </Menu>

        <MediaElement Source="C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"  Stretch="Fill"/>

    </DockPanel>

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Jaon_Li 2011年3月3日 6:10
    2011年3月3日 5:44
    版主
  • 一个window里winform会显示在最前的。

    可以用两个window来做,第一个window放winform的控件,第二个window放wpf控件,window可以设置透明背景。

    2011年3月8日 7:27
  • 感谢 Allen,是的,这样也是一个很好的workaround。


    Sheldon _Xiao[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月8日 7:34
    版主
  • 如何做两个 Window ,一个window 放 WPF 控件捕获鼠标消息,一个window 显示 winform 控件?

    Weibo @雪松Cedro
    Blog 雪松

    2014年7月19日 3:34