尝试解决Win32控件造成的WPF原生控件遮盖问题

在网上查找了一下造成Win32控件会遮盖WPF原生控件的原因,网上的说法是由于Win32的渲染模式和WPF的渲染模式不一样,Win32渲染出来之后会一直处于所有控件的最上层,所以设定WPF控件的图层高于WPF控件的方法是不起作用的。

        如果不需要对WPF进行双向绑定的话,有一个简单的方法让WPF显示在win32控件之上,就是将Wpf元素也使用WindowsFormsHost容器进行一层包裹。但是这种方法有个弊端就是无法进行双向绑定了,如果只是想展示个图片啥的这个方法是最好用的,但是如果是涉及到数据双向绑定的没什么用了 。这种方法具体参考:Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 - 一个呆子 - 博客园 (cnblogs.com)

<wfi:WindowsFormsHost >
     <ElementHost>
            <StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Right"                 Background="Blue" Width="75" Height="45"> 
                 <Button><Button/>
            </StackPanel>
     </ElementHost>
</wfi:WindowsFormsHost>

由于我的需求要进项数据的双向绑定,所以这个方法无法使用,但是在刚才的帖子的评论区里我找到了答案,那就是利用Popup控件,这个控件会一直显示在所有程序的最上层,即使你用别的程序改过你开发的程序,Popup面板依旧会显示在最上面。我们只要把需要的控件绘制到Popup面板上就可以了。

我们可以自定义一个Popup,控制Popup的IsTopmost属性与自己开发的程序的主窗体的Activated属性做关联,在窗体不同的状态进行不同的显示状态,就不会造成Popup遮盖所有应用程序的问题了,具体可以参考文章:WPF解决Popup窗口随动及显隐_wpf浮动窗口 隐藏 显示-CSDN博客

Popup的背景颜色设置为透明就可以完美显示控件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值