项目案例: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背景透明相关推荐

  1. WPF ChromiumWebBrowser 网页背景透明

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

  2. 解决flash背景透明问题

    1.flash引用代码中,增加  <param name="wmode" value="transparent"> 2.在embed标签中增加  w ...

  3. WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)

    在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None".AllowsTransparency="True" 这两个 ...

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

    WPF实现背景透明磨砂,并通过HandyControl组件实现弹出等待框 原文:WPF实现背景透明磨砂,并通过HandyControl组件实现弹出等待框 前言:上一个版本的Winform需要改成WPF ...

  5. java字体被背景盖住_背景透明后字体,贴图产生遮盖覆盖问题的解决方法。

    关于背景透明,透明贴图后,Invalidate(FALSE)刷新后贴图被上次的痕迹遮盖. Invalidate(TRUE)可以去除遮盖的痕迹,但这样的的闪烁谁也无法接受 这个问题产生的原因可能是Set ...

  6. html背景透明图片不透明,css中背景透明的图片不透明怎么解决

    css中背景透明的图片不透明怎么解决 一.使用滤镜解决img { background: transparent; -ms-filter: "progid:DXImageTransform. ...

  7. 设置背景透明时里面内容内容模糊(已解决)

    我们通常会遇到这种问题,特别是对于我这种前端小白,在导航栏鼠标放上去的时候,设置背景透明,结果里面的文字也变暗了,这是因为子元素的文字继承了父元素的属性了,那怎么办,用伪类设同级元素就好. 先贴代码, ...

  8. 在IE下FLASH背景透明而在FF下不透明的解决方法

    flash背景透明的代码在IE中能显示正常: <objectclassid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codeb ...

  9. 关于png、背景透明疑难杂症综合帖

    前言 在web重构中,为了追求视觉效果,会经常使用标签背景透明.透明的png图片等,可惜ie6未死,所以经常会有这样那样的问题出现,下面我总结一下ie6下各种怪症和解决方法. 标签背景透明 常规方法 ...

最新文章

  1. Github多人合作用法
  2. CSS3与动画有关的属性transition、animation、transform对比
  3. 模组使用之NB-IoT模组的工作模式、PSM、DRX和eDRX状态说明
  4. 树的高度从零还是一开始数_数据结构与算法之1——树与二叉树
  5. c语言倒序输出字符串数组,【C语言】利用栈将数组中字符串逆序
  6. linux php7 安装redis扩展(php7可以使用自测)
  7. expdp导出 schema_Oracle使用数据泵在异机之间导出导入多个 schema
  8. jquery.treeview.js php mysql,jquery.treeview应用
  9. unity2d随机生成物体_平面测量路径生成的4种方式
  10. a标签去掉下划线_html常用标签、包含关系、常用术语,以及网页设计中的字体分类
  11. 【机器学习】隐马尔可夫模型及其三个基本问题(三)模型参数学习算法及python实现
  12. (秒杀项目) 4.5 项目部署与压测
  13. 【Python 12】汇率兑换5.0(Lambda函数)
  14. 常用工具软件使用【2】
  15. chrome主页和新标签页被金山毒霸劫持 处理方法
  16. 差文解析 IIRC: Incremental Implicitly-Refined Classification
  17. python常用library
  18. 项目开发遇到前端传递时间问题处理
  19. iphone相册储存空间已满_iphone可用存储空间已满?教你快速回收存储空间
  20. 案场渠道稽核管理系统更新记录V1.2

热门文章

  1. BZOJ 2959: 长跑 解题报告
  2. 关闭360浏览器广告(广告洁癖)
  3. eclipse中访问不了tomcat首页server Locations变灰无法编辑
  4. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
  5. 负margin的移位参考线
  6. 【转】“根级别上的数据无效”问题的解决
  7. 算法学习:后缀自动机
  8. 纯CSS实现多级菜单,兼容IE6
  9. MacOS中安装python-jekins失败解决方法
  10. java的String构造对象的几种方法以及内存运行过程