WPF解决WindowsFormsHost背景透明
项目案例:WPF使用WindowsFormsHost播放视频,视频上显示边框、字幕等特效;
难点问题
1、WindowsFormsHost不支持背景透明;
2、WPF Panel.ZIndex无效,WindowsFormsHost更优先;
3、使用Show打开两个窗口,数据同步延时
解决方案:
使用Popup,解决最顶层、解决背景透明
使用Canvas,解决元素拖拽
XAML
- <ctrl:uiPopup x:Name="canvas" VerticalOffset="-410" IsOpen="True" AllowsTransparency="True" PopupAnimation="Fade">
- <Canvas Height="410" Width="548">
- <Image x:Name="PanelLeft" Height="410" Width="45" Canvas.Left="0"></Image>
- <Image x:Name="PanelTop" Height="45" Width="548" Canvas.Top="0"></Image>
- <Image x:Name="PanelRight" Height="410" Width="45" Canvas.Right="0"></Image>
- <Image x:Name="PanelBottom" Height="45" Width="548" Canvas.Bottom="0"></Image>
- <Image x:Name="PanelPlus" Height="100" Width="100" Panel.ZIndex="1"></Image>
- </Canvas>
- </ctrl:uiPopup>
ctrl:uiPopup控件,参考: 自定义WPF Popup控件
C#
- //注册移动事件
- PanelPlus.MouseLeftButtonDown += rectOne_MouseLeftButtonDown;
- PanelPlus.MouseLeftButtonUp += rectOne_MouseLeftButtonUp;
- PanelPlus.MouseMove += rectOne_MouseMove;
- bool enableMove = false;
- double spanLeft = 0;
- double spanTop = 0;
- //鼠标移动
- private void rectOne_MouseMove(object sender, MouseEventArgs e)
- {
- if (enableMove)
- {
- var cLeft = e.GetPosition(canvas).X - spanLeft;
- var cTop = e.GetPosition(canvas).Y - spanTop;
- //设置矩形的位置
- Canvas.SetLeft(PanelPlus, cLeft);
- Canvas.SetTop(PanelPlus, cTop);
- }
- }
- //鼠标松开
- private void rectOne_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
- {
- //释放鼠标捕获
- PanelPlus.ReleaseMouseCapture();
- enableMove = false;
- }
- //鼠标按下
- private void rectOne_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- var y = Convert.ToDouble(e.GetPosition(canvas).Y);
- y = Utils.IsNumber(y) ? y : 0;
- var x = Convert.ToDouble(e.GetPosition(canvas).X);
- x = Utils.IsNumber(x) ? x : 0;
- //创建鼠标捕获
- Mouse.Capture(PanelPlus);
- double l = Convert.ToDouble(Canvas.GetLeft(PanelPlus));
- l = Utils.IsNumber(l) ? l : 0;
- double t = Convert.ToDouble(Canvas.GetTop(PanelPlus));
- t = Utils.IsNumber(t) ? t : 0;
- spanLeft = x - l;
- spanTop = y - t;
- enableMove = true;
- }
- public class Utils
- {
- //判断字符串是否为纯数字
- public static bool IsNumber(object str)
- {
- if (str == null) return false;
- ASCIIEncoding ascii = new ASCIIEncoding();
- byte[] bytestr = ascii.GetBytes(str.ToString());
- foreach (byte c in bytestr)
- {
- if (c < 48 || c > 57)
- {
- return false;
- }
- }
- return true;
- }
- }
WPF解决WindowsFormsHost背景透明的更多相关文章
- WPF ChromiumWebBrowser 网页背景透明
网页中添加下面样式即可: <style> html, body { margin: 0px; height: %; width: %; overflow: hidden; backgrou ...
- VC++ CStatic控件背景透明且改变其文本时,文字重叠解决方法
最近在项目中将CStatic控件设置为背景透明且在一个定时器函数改变其文本,结果CStatic的文字重叠了.解决该问题的方案是:从CStatic类派生自己的静态文本控件. 其实设置背景透明,也就是在C ...
- ie6背景透明的设置方法 ie6背景颜色透明和png图像透明解决方法
IE6浏览器,让我们又爱又恨.爱它的是,可以让我们写的代码的时候,可以更标准,恨的是,它有太多无厘头的IE6常见bug(详情点击),让我们焦头烂额.现在现在用百度浏览器调查,国内占有率不到6%了,但是 ...
- popupWindow设置后完美解决返回键响应无效的方案以及popupWindow背景透明方案
// 点击其他地方消失 viewPuwAddNew.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouc ...
- 解决css设置背景透明,文字不透明
设置元素的透明度: -moz-opacity:0.8; /*在Firefox中设置元素透明度 filter: alpha(opacity=80); /*ie使用滤镜设置透明 但是当我们对一个标 ...
- WPF解决按钮上被透明控件遮盖时无法点击问题
原文:WPF解决按钮上被透明控件遮盖时无法点击问题 IsHitTestVisible="False" 在控件上设置如上属性即可,即可让透明控件不触发点击效果
- C# 实现PNG文件的背景透明显示,解决动态显示闪烁问题 【转】
http://blog.sina.com.cn/s/blog_402c071e0102x4rl.html 以下内容,对于想要使用C#实现PNG图片背景透明显示,同时动态显示时无闪烁问题的人来说, ...
- WPF Windows背景透明其中的文字保持不透明
原文:WPF Windows背景透明其中的文字保持不透明 版权声明:本文为博主原创,未经允许不得转载.交流.源码资料加群:161154103 https://blog.csdn.net/mpegfou ...
- WPF实现背景透明磨砂,并通过HandyControl组件实现弹出等待框
前言:上一个版本的Winform需要改成WPF来做界面,第一次接触WPF,在转换过程中遇到的需求就是一个背景透明模糊,一个是类似于 加载中…… 这样的等待窗口,等后台执行完毕后再关掉.在Winform ...
随机推荐
- Linux Tomcat安装及端口配置
1. JDK安装配置 待写 2. Tomcat安装配置 1,下载Tomcat链接,到启动测试. 将文件apache-tomcat-8.5.50.tar.gz移动到/usr/tomcat/下,并解压 ...
- 浅析Volatile关键字
浅析Volatile关键字 在java中线程并发中,线程之间通信方式分为两种:共享内存和消息传递.共享内存指的是多个线程之间共享内存的属性状态:消息传递指的是线程之间发送信息来通信.在介绍volati ...
- Python 和 R 中的一数多图
R # 一数多图 x <- 2:6 y <- 7:3 y1 <- y +2 opar <- par(no.readonly = TRUE) par(mfrow=c(2, 3)) ...
- wordpress迁移后登陆时出现Forbidden You don’t have permission to access /wp-login.php on this server
之前在vps上,最近迁移到了php虚拟主机上,迁移后发现无法登陆后台出现403:Forbidden You don’t have permission to access /wp-login.php ...
- 第11节-BLE协议HCI层的硬件接口
本篇博客由韦东山视频整理所得 如何控制链路层让其发出广播包.数据包?通过HCI层向它发出命令,也可以通过ATT层.L2CAP层向LL层发出数据. 学习资料: 蓝牙协议core_v5.0.pdf < ...
- LIST OF BEST OPEN SOURCE BLOCKCHAIN PLATFORMS
https://www.blockchain-council.org/blockchain/list-of-best-open-source-blockchain-platforms/ Open so ...
- Sublime Text2中的快捷方式及html各种标签(待完善)
快捷方式 1.xhtml+tab 2.自动补全标签 Alt + . 补全标签 标签 1.<p>段落标签 ,前后换行 <h1.2.3.4.5>标题标签 h1最大,一级标题 2. ...
- 提高 Visualforce 页面加载效率的小知识
一般原则 在设计页面时,我们要将页面的功能降至最少,不要包含多余的功能和数据,以最大化提高运行效率 如果需要开发的功能可以通过 Salesforce 的标准功能实现,那么尽量使用标准功能,比如 工作流 ...
- selenium--加载浏览器配置
前戏 在我们之前写的自动化脚本中,不知道大家有没有发现,每次打开的都是一个新的浏览器(相当于新安装的).但是有时候,我们想打开的是我们配置好的浏览器.我在之前的公司做web自动化的时候,由于我们的网站 ...
- 【CSP-S膜你考】那23个路口
那23个路口 题面 故事的起源不加赘述,那23个路口. 单刀直入,我直接说题的意思. 蚊子和疯子在做一件事,就是他们要在茫茫的大街上找一个出发点,然后从出发点开始,经过上下左右23次拐弯,到达一个他们 ...