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 ...
随机推荐
- OpenLDAP 安装教程
OpenLDAP 安装教程 本文原始地址:https://sitoi.cn/posts/48217.html 在centos7上安装OpenLDAP 环境准备 两台虚拟机 node01 IP:192. ...
- Nginx 高级配置-压缩功能
Nginx 高级配置-压缩功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx压缩相关参数概述 1>.gzip on | off; Nginx支持对指定类型的文 ...
- 逆向破解之160个CrackMe —— 031
CrackMe —— 031 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- Linux 命令 mv
mv 命令 --no-target-directory 参数确保对目录进行重命名而不是移动 https://www.gnu.org/software/coreutils/manual/html_nod ...
- MVC Core 使用TagHelper扩展几个插件
未完待续... 案例1:按钮权限校验,无权限不显示,利用TagHelper控制元素是否输出 [HtmlTargetElement("tc-permission", TagStruc ...
- 【CSP-S膜你考】不怕噩梦 (模拟)
不怕噩梦 题面 蚊子最近经常做噩梦,然后就会被吓醒.这可不好.. 疯子一直在发愁,然后突然有一天,他发现蚊子其实就是害怕某些事. 如果那些事出现在她的梦里,就会害怕. 我们可以假定那个害怕的事其实是一 ...
- QHBoxLayout 、QFormLayout 遍历子部件,查找QLineEdit控件
布局如下: QLineEdit * edit1 = new QLineEdit; QLineEdit * edit2 = new QLineEdit; QLineEdit * edit3 = new ...
- 2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础
目录 实验目的 实验内容 Webgoat前期准备 出现的问题 (一)SQL注入攻击 命令注入:Command Injection 数字型注入:Numeric SQL Injection 日志欺骗:Lo ...
- ValueError: Graph disconnected: cannot obtain value for tensor Tensor
一般是Input和下面的变量重名了,导致model里面的input变成了第二次出现的Input变量,而不是最开始模型中作为输入的Input变量 改正方法:给第二个变量赋一个新名字即可
- cad.arx 自定义实体之编译第一个项目(甜头)
本篇不从零开始讲如何制造自定义图元,而是教新手们如何设置了环境之后编译张帆书中的代码. 利用vs2010编译 张帆<AutoCAD ObjectARX(VC)开发基础与实例教程>一书中的自 ...