日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

WPF解决WindowsFormsHost背景透明

發布時間:2025/6/17 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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背景透明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。