概述
WPF加载Winform控件时总是位于顶层,同位置处再放置WPF控件将会被遮挡。这在实际应用当中,例如:加载视频流时,总是使用Winform的PictureBox控件来显示,如果用WPF去加载这个PictureBox控件,想在上面加个控制按钮或者默认图标时就会出现这个显示层级问题。
例如窗体代码:
<Window x:Class="WpfWinformDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:WinFormHost="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:WinFormControls="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:local="clr-namespace:WpfWinformDemo"
mc:Ignorable="d" Loaded="Window_Loaded"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="10">
<WindowsFormsHost Background="Transparent">
<WinFormControls:PictureBox x:Name="pictureBox"/>
</WindowsFormsHost>
<Image x:Name="imgPlay" Width="32" Height="32" Source="/Resource/paly.png" Stretch="Fill"></Image>
</Grid>
</Window>
后台逻辑:
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.pictureBox.Image = System.Drawing.Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + @"Resourcevideo.jpg");//这里用图片模仿视频播放
this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
}
}
效果,只显示PictureBox内容:
解决方案:利用WPF中Popup控件,Popup具有非常高的层级,因此可以展示在PictureBox的前面。修改窗体代码:
<Popup AllowsTransparency="True" IsOpen="True" HorizontalOffset="25" VerticalOffset="-60">
<Image x:Name="imgPlay" Width="32" Height="32" Source="/Resource/paly.png" Stretch="Fill"></Image>
</Popup>
展示效果:
这时,虽然解决了层级问题,但是因为Popup控件的特殊性(类似于弹出式窗体),在拖拽窗体或者窗体被其他软件遮挡时,Popup还是呆在原来的位置。这里引用完美解决WPF中Popup控件跟随移动和始终位于最上层问题 里封装的自定义Popup控件,添加CusPopup类继承自Popup,窗体代码修改为:
<local:CusPopup AllowsTransparency="True" IsOpen="True" HorizontalOffset="25" VerticalOffset="-60" IsTopmost="False" IsMove="True">
<Image x:Name="imgPlay" Width="32" Height="32" Source="/Resource/paly.png" Stretch="Fill"></Image>
</local:CusPopup>
运行效果:
最后
以上就是丰富书包为你收集整理的解决WPF加载Winform控件时的显示遮挡问题的全部内容,希望文章能够帮你解决解决WPF加载Winform控件时的显示遮挡问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复