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;}
}
转载于:https://www.cnblogs.com/sntetwt/p/11345029.html
WPF解决WindowsFormsHost背景透明相关推荐
- WPF ChromiumWebBrowser 网页背景透明
网页中添加下面样式即可: <style>html, body {margin: 0px;height: 100%;width: 100%;overflow: hidden;backgrou ...
- 解决flash背景透明问题
1.flash引用代码中,增加 <param name="wmode" value="transparent"> 2.在embed标签中增加 w ...
- WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)
在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None".AllowsTransparency="True" 这两个 ...
- WPF实现背景透明磨砂,并通过HandyControl组件实现弹出等待框
WPF实现背景透明磨砂,并通过HandyControl组件实现弹出等待框 原文:WPF实现背景透明磨砂,并通过HandyControl组件实现弹出等待框 前言:上一个版本的Winform需要改成WPF ...
- java字体被背景盖住_背景透明后字体,贴图产生遮盖覆盖问题的解决方法。
关于背景透明,透明贴图后,Invalidate(FALSE)刷新后贴图被上次的痕迹遮盖. Invalidate(TRUE)可以去除遮盖的痕迹,但这样的的闪烁谁也无法接受 这个问题产生的原因可能是Set ...
- html背景透明图片不透明,css中背景透明的图片不透明怎么解决
css中背景透明的图片不透明怎么解决 一.使用滤镜解决img { background: transparent; -ms-filter: "progid:DXImageTransform. ...
- 设置背景透明时里面内容内容模糊(已解决)
我们通常会遇到这种问题,特别是对于我这种前端小白,在导航栏鼠标放上去的时候,设置背景透明,结果里面的文字也变暗了,这是因为子元素的文字继承了父元素的属性了,那怎么办,用伪类设同级元素就好. 先贴代码, ...
- 在IE下FLASH背景透明而在FF下不透明的解决方法
flash背景透明的代码在IE中能显示正常: <objectclassid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codeb ...
- 关于png、背景透明疑难杂症综合帖
前言 在web重构中,为了追求视觉效果,会经常使用标签背景透明.透明的png图片等,可惜ie6未死,所以经常会有这样那样的问题出现,下面我总结一下ie6下各种怪症和解决方法. 标签背景透明 常规方法 ...
最新文章
- Github多人合作用法
- CSS3与动画有关的属性transition、animation、transform对比
- 模组使用之NB-IoT模组的工作模式、PSM、DRX和eDRX状态说明
- 树的高度从零还是一开始数_数据结构与算法之1——树与二叉树
- c语言倒序输出字符串数组,【C语言】利用栈将数组中字符串逆序
- linux php7 安装redis扩展(php7可以使用自测)
- expdp导出 schema_Oracle使用数据泵在异机之间导出导入多个 schema
- jquery.treeview.js php mysql,jquery.treeview应用
- unity2d随机生成物体_平面测量路径生成的4种方式
- a标签去掉下划线_html常用标签、包含关系、常用术语,以及网页设计中的字体分类
- 【机器学习】隐马尔可夫模型及其三个基本问题(三)模型参数学习算法及python实现
- (秒杀项目) 4.5 项目部署与压测
- 【Python 12】汇率兑换5.0(Lambda函数)
- 常用工具软件使用【2】
- chrome主页和新标签页被金山毒霸劫持 处理方法
- 差文解析 IIRC: Incremental Implicitly-Refined Classification
- python常用library
- 项目开发遇到前端传递时间问题处理
- iphone相册储存空间已满_iphone可用存储空间已满?教你快速回收存储空间
- 案场渠道稽核管理系统更新记录V1.2
热门文章
- BZOJ 2959: 长跑 解题报告
- 关闭360浏览器广告(广告洁癖)
- eclipse中访问不了tomcat首页server Locations变灰无法编辑
- linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
- 负margin的移位参考线
- 【转】“根级别上的数据无效”问题的解决
- 算法学习:后缀自动机
- 纯CSS实现多级菜单,兼容IE6
- MacOS中安装python-jekins失败解决方法
- java的String构造对象的几种方法以及内存运行过程