项目案例: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背景透明的更多相关文章

  1. WPF ChromiumWebBrowser 网页背景透明

    网页中添加下面样式即可: <style> html, body { margin: 0px; height: %; width: %; overflow: hidden; backgrou ...

  2. VC++ CStatic控件背景透明且改变其文本时,文字重叠解决方法

    最近在项目中将CStatic控件设置为背景透明且在一个定时器函数改变其文本,结果CStatic的文字重叠了.解决该问题的方案是:从CStatic类派生自己的静态文本控件. 其实设置背景透明,也就是在C ...

  3. ie6背景透明的设置方法 ie6背景颜色透明和png图像透明解决方法

    IE6浏览器,让我们又爱又恨.爱它的是,可以让我们写的代码的时候,可以更标准,恨的是,它有太多无厘头的IE6常见bug(详情点击),让我们焦头烂额.现在现在用百度浏览器调查,国内占有率不到6%了,但是 ...

  4. popupWindow设置后完美解决返回键响应无效的方案以及popupWindow背景透明方案

    // 点击其他地方消失 viewPuwAddNew.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouc ...

  5. 解决css设置背景透明,文字不透明

    设置元素的透明度:  -moz-opacity:0.8; /*在Firefox中设置元素透明度  filter: alpha(opacity=80); /*ie使用滤镜设置透明   但是当我们对一个标 ...

  6. WPF解决按钮上被透明控件遮盖时无法点击问题

    原文:WPF解决按钮上被透明控件遮盖时无法点击问题 IsHitTestVisible="False" 在控件上设置如上属性即可,即可让透明控件不触发点击效果

  7. C# 实现PNG文件的背景透明显示,解决动态显示闪烁问题 【转】

    http://blog.sina.com.cn/s/blog_402c071e0102x4rl.html    以下内容,对于想要使用C#实现PNG图片背景透明显示,同时动态显示时无闪烁问题的人来说, ...

  8. WPF Windows背景透明其中的文字保持不透明

    原文:WPF Windows背景透明其中的文字保持不透明 版权声明:本文为博主原创,未经允许不得转载.交流.源码资料加群:161154103 https://blog.csdn.net/mpegfou ...

  9. WPF实现背景透明磨砂,并通过HandyControl组件实现弹出等待框

    前言:上一个版本的Winform需要改成WPF来做界面,第一次接触WPF,在转换过程中遇到的需求就是一个背景透明模糊,一个是类似于 加载中…… 这样的等待窗口,等后台执行完毕后再关掉.在Winform ...

随机推荐

  1. Make Rounddog Happy(2019年杭电多校第十场1011+HDU6701+启发式分治)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 求有多少个子区间满足\(a_l,a_{l+1},\dots,a_r\)均不相同且\(max(a_l,a_{l+1},\dots,a_r)-(r ...

  2. boost与MFC的冲突(new)

    在MFC对话框程序中用boost::signals2时出现了问题, 由于MFC为了方便调试,在debug下重新定义了new #ifdef _DEBUG#define new DEBUG_NEW#end ...

  3. flask-restful在解析的请求一定要传content-type:application/json吗?答:其实不需要!

    在处理flask-restful api请求时,因为postman发送的格式为text,没有携带content-type:application/json,在解析参数的时候,参数的值都给搞成了空,导致 ...

  4. 题解 P4305 【[JLOI2011]不重复数字】

    来一波用vector的最短代码题解 P4305 [JLOI2011]不重复数字 关于hash表的部分大家可以看一看其他的题解,我就不说了 不定长数组vector的几个基本用法: 定义: vector& ...

  5. 10-day03-注释

    Python注释 msg = “我爱你中国!” #单行注释使用 ''''''多行注释使用 print(msg) #this code is for >>>> ‘’‘print( ...

  6. CF852A Digits

    CF852A Digits 隔壁yijian大佬写出了正解.那我就写一个随机化大法吧? 我们先考虑一种错误的贪心,每个数字分成一位,使其分割后数字和最小.虽然这样是错的,但是我们发现错误的概率很小,所 ...

  7. Windows安装gmpy2

    我在终端用python2的pip安装gmpy2时显示缺少Visual C++ 9.0 按照其要求,访问他给的网址安装一下 https://pypi.org/project/gmpy2/#files 进 ...

  8. python虚拟环境切换无效问题

    使用pycharm创建新项目,使用虚拟环境,但是进入到项目的cainiao_guoguo_health\venv\Scripts目录启动虚拟环境后,安装第三方库,却还是安装到其他环境中去了, 检查ac ...

  9. button 在chrome浏览器下被点击时会出现一个橙色的边框

    问题描述: button在chrome浏览器下被点击时会出现一个橙色的边框 在button上添加 :focus{outline:none;}也无法解决. 解决办法: 在button上添加 :focus ...

  10. 基于ZYNQ的uart传输任意长度的数据

    1.参考 UG585 网络笔记 参考:ZYNQ进阶之路14–PS端uart串口接收不定长数据 2.理论知识 参见上一次实验:基于ZYNQ 的UART中断实验之串口写数据到DDR3中 3.实验目的 基于 ...