WPF应用中对WindowsFormHost内容进行裁剪
问题1:
WPF中在使用WindowsFormsHost调用WinFrom控件时,若在WindowsFormsHost上层添加了WPF控件,该控件不会显示出来。
<Grid>
<WindowsFormsHost Background="White">
<Winfrm:WebBrowser x:Name="WinFrmWebBrowser"/>
</WindowsFormsHost>
<!--运行时 Ellipse 不会显示出来-->
<Ellipse Width="100" Height="100" Fill="Red"/>
</Grid>
解决方案: 使用Popup对上层的WPF控件内容进行包装。
<Style TargetType="{x:Type local:MyBrowser}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyBrowser}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Border x:Name="Part_BdrWinfrmHostContainer">
<WindowsFormsHost x:Name="Part_WinfrmHost" Background="Gray">
<Winfrm:WebBrowser x:Name="Part_WinFrmWebBrowser"/>
</WindowsFormsHost>
</Border>
<Popup x:Name="PART_Popup" IsOpen="True" Placement="Center"
AllowsTransparency="True">
<!--所有WPF内容添加至这个Border里面-->
<Border x:Name="PART_Content"/>
</Popup>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我测试时封装成了自定义的CustomControl。 对应的.cs文件中定义了Link、 Content两个依赖属性接收参数。
<Grid x:Name="GdPopupWays" Grid.Column="1">
<local:MyBrowser Link="http://www.baidu.com">
<local:MyBrowser.Content>
<!--local:OverLayer是自定义的UserControl-->
<local:OverLayer/>
</local:MyBrowser.Content>
</local:MyBrowser>
</Grid>
如右侧,我创建了一个黄色的Ellipse叠加在WindowsFormHost 上面成功呈现出来。(tips:我在WindowsFormHost 里面加载了WinForm的WebBrowser)。
问题2:
想要将加载在WindowsFormHost中的内容进行裁剪。
解决方案:WinForm控件的Region属性限制显示区域。 相当于WPF的Clip。 示例如下:
GraphicsPath path = new GraphicsPath() { FillMode = FillMode.Winding };
path.StartFigure();
path.AddEllipse(new System.Drawing.Rectangle(, , (int), (int)));
path.AddRectangle(new System.Drawing.Rectangle(, , , ));
path.CloseFigure();
this.WinformRtx.Region = new Region(path);
我的测试效果,WPF中用Image加载了一张星空图,右上角放置了WindowsFormHost内容。我对其进行了显示区域限制。
3:问题三
两个WindowsFormHost叠加时,WindowsFormHost对于png的背景图不支持透明。如下图:
<Grid x:Name="GdMain">
<Image x:Name="ImgSky" Source="Sky.jpg" Stretch="Fill"/> <!--加载Winform的WebBrowser-->
<WindowsFormsHost Background="White">
<Winfrm:WebBrowser x:Name="WinFrmWebBrowser"/>
</WindowsFormsHost> <WindowsFormsHost Width="" Height="" HorizontalAlignment="Right"
x:Name="WinfrmHostOverlayer" VerticalAlignment="Top"
Background="Transparent">
<Winfrm:Panel x:Name="WinfrmPanel"/>
</WindowsFormsHost>
</Grid>
可以看到右上角的png边框分明(实时上我放的是一张三个角均为透明的圆形png)。 若对右上角的Winform Panel进行裁剪。
裁剪完后,下面一层的WindowsFormHost也被裁了,露出了我用Image加载的星空底图,如下图:
解决方案:将要加载的Winform控件放在一起,可以是在同一个Winform Panel下面,这时在进行裁剪就不会有问题。如
<Grid x:Name="GdMain">
<Image x:Name="ImgSky" Source="Sky.jpg" Stretch="Fill"/>
<WindowsFormsHost HorizontalAlignment="Right"
x:Name="WinfrmHostOverlayer" VerticalAlignment="Top"
Background="Transparent">
<Winfrm:Panel x:Name="WinfrmPanel">
<!--<Winfrm:WebBrowser x:Name="WinFrmWebBrowser"/>-->
<!--<Winfrm:Panel x:Name="WinFrmSubPanel"/>-->
</Winfrm:Panel>
</WindowsFormsHost>
</Grid>
上文中WebBrowser我都加载的是www.baidu.com. 为了凸显效果,下图所示Demo加载的是腾讯企业邮箱主页。
源代码下载链接:微信扫描下方二维码文章末尾获取链接。
WPF应用中对WindowsFormHost内容进行裁剪的更多相关文章
- WPF TextSelection获取选中部分内容
一.简单实例 //TextSelect继承自TextRange TextSelection selection = richTextBox.Selection; //1.获取选中内容 string r ...
- 如何在WPF程序中使用ArcGIS Engine的控件
原文 http://www.gisall.com/html/47/122747-4038.html WPF(Windows Presentation Foundation)是美国微软公司推出.NET ...
- WPF/Silverlight中的RichTextBox总结
WPF/Silverlight中的RichTextBox总结 在WPF或者是在Silverlight中有个非常强大的可以编辑的容器控件RichTextBox,有的时间会采取该控件来作为编辑控件.鉴 ...
- WPF程序中App.Config文件的读与写
WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就 ...
- WPF拖动DataGrid滚动条时内容混乱的解决方法
WPF拖动DataGrid滚动条时内容混乱的解决方法 在WPF中,如果DataGrid里使用了模板列,当拖动滚动条时,往往会出现列表内容显示混乱的情况.解决方法就是在Binding的时候给Update ...
- C# WPF DataGrid 隔行变色及内容居中对齐
C# WPF DataGrid 隔行变色及内容居中对齐. dqzww NET学习0 先看效果: 前台XAML代码: <!--引入样式文件--> <Window.Resourc ...
- 浅谈WPF本质中的数据和行为
WPF缩写为Windows Presentation Foundation的缩写,本文所要谈的就是WPF本质中的数据和行为,希望通过本文能对大家了解WPF本质有所帮助. 如果自己来做一个UI框架,我们 ...
- Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
Oracle 远程访问配置 服务端配置 如果不想自己写,可以通过 Net Manager 来配置. 以下配置文件中的 localhost 改为 ip 地址,否则,远程不能访问. 1.网络监听配置 ...
- 优雅的在WinForm/WPF/控制台 中使用特性封装WebApi
优雅的在WinForm/WPF/控制台 中使用特性封装WebApi 说明 在C/S端作为Server,建立HTTP请求,方便快捷. 1.使用到的类库 Newtonsoft.dll 2.封装 HttpL ...
随机推荐
- gulp+webpack+angular1的一点小经验(第一部分gulp与webpack的整合)
时间匆匆如流水继上周熟悉了gulp的初步安装与环境配置以后,我的项目又进入了新的阶段! 这篇文章将把我这一周遇到的一些问题,以及解决的方式做一个小小的总结,不一定记的完整,但都是个人的一点经验,分享给 ...
- OC循环方法推荐-块循环遍历(比for循环好用)
最近在看一本书<Effective OC 2.0>,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环. 阅读时思考了下块循环是否方便实现内部循环终止外部循环的问题. 于是做 ...
- js中innerHTML和outerHTML的相同与不同
innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML,包括标签. outerHTML 设置或获取对象及其内容的HTML形式,也就是标签和文本内容全都显示出来 innerText ...
- 教你们学习一个最简单又企业最需要的服务-crond
第13章 定时任务的介绍 13.1 定时任务的分类 13.1.1 系统实现定时任务的配置 [root@oldboyedu ~] # cd /etc/cron. cron.d/ cron.daily/ ...
- 在ASP.NET Core中使用托管启动(hosting startup)程序集,实现批量注册service
在启动ASPNET Core时可以从外部程序集向应用添加增强功能.例如,外部库可以用托管启动( hosting startup) 实现为应用程序提供附加配置(Configuration)或服务(ser ...
- 【C语言】%f,%lf,%3.1f
在输出时应注意变量类型,使用如%3.1时会默认四舍五入.
- Linux搭建Java环境(JDK+Tomcat+MySQL)
目录 一.项目环境: 二.安装JDK1.8 三.安装Tomcat8.5 四.安装MySQL数据库 五.配置JAVA项目 一.项目环境: 开发环境 生产环境 测试环境 硬件环境: web服务器:cpu: ...
- git 中的 merge 和 rebase
示例分支:master . dev 把 dev 分支上的新内容合并到 master 上 先切换分支到master git checkout master 合并操作 git merge dev 或者 g ...
- Jenkins-部署java代码项目
实验环境: Jenkins:192.168.1.12 tomcat:192.168.1.7 一.新建远程代码Java项目仓库 说明:这边测试是在coding上注册账户,建立远程仓库,codin ...
- JS中&&和||的理解
运算符可以从三个不同的层次进行理解. 第一层理解 当操作数都是布尔值时,"&&"对两个值执行布尔与(AND)操作. 复制代码代码如下: x==0 && ...