Avalonia UI 引入winform 教程

打印 上一主题 下一主题

主题 1779|帖子 1779|积分 5337

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在将WPF升级到Avalonia时,可能很多开发者风俗利用WPF的WindowsFormsHost来嵌入WinForms组件。Avalonia虽然没有WindowsFormsHost,但提供了功能类似的NativeControlHost接口,实现同样的结果。
NativeControlHost是Avalonia框架中的一个功能组件,允许在Avalonia应用中嵌入特定平台的原生控件或窗口。这对于需要与现有原生UI控件协同工作或直接访问平台特定UI功能的情况特殊有效。
以下是利用示例代码:
 
  1. public class PictureBoxHost : NativeControlHost
  2. {
  3.      public nint PictureBoxHandle { get; set; }
  4.    
  5.      protected override IPlatformHandle CreateNativeControlCore(IPlatformHandle parent)
  6.      {
  7. <UserControl xmlns="https://github.com/avaloniaui"
  8.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  9.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  10.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  11.              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  12.              x:Class="HB.Frame.Views.HKCamera"
  13.              Loaded="UserControl_Loaded">
  14.    
  15.     <ContentControl x:Name="MyContentControl" VerticalAlignment="Stretch"
  16.                     HorizontalAlignment="Stretch" Background="#000000"/>
  17. </UserControl> System.Windows.Forms.PictureBox pictureBox = new System.Windows.Forms.PictureBox();
  18. <UserControl xmlns="https://github.com/avaloniaui"
  19.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  20.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  21.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  22.              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  23.              x:Class="HB.Frame.Views.HKCamera"
  24.              Loaded="UserControl_Loaded">
  25.    
  26.     <ContentControl x:Name="MyContentControl" VerticalAlignment="Stretch"
  27.                     HorizontalAlignment="Stretch" Background="#000000"/>
  28. </UserControl> this.PictureBoxHandle = pictureBox.Handle;
  29. <UserControl xmlns="https://github.com/avaloniaui"
  30.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  31.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  32.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  33.              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  34.              x:Class="HB.Frame.Views.HKCamera"
  35.              Loaded="UserControl_Loaded">
  36.    
  37.     <ContentControl x:Name="MyContentControl" VerticalAlignment="Stretch"
  38.                     HorizontalAlignment="Stretch" Background="#000000"/>
  39. </UserControl> return new PlatformHandle(pictureBox.Handle, "HWND");
  40.      }
  41. }
复制代码
 
这里自定义一个PictureBoxHost类 继承了 NativeControlHost基类
重写了CreateNativeControlCore方法 这个方法的目的 可以帮你创建系统任何原生组件  不仅是winform 
创建了后如何利用呢? 
 
  1. <UserControl xmlns="https://github.com/avaloniaui"
  2.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  4.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5.              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  6.              x:Class="HB.Frame.Views.HKCamera"
  7.              Loaded="UserControl_Loaded">
  8.    
  9.     <ContentControl x:Name="MyContentControl" VerticalAlignment="Stretch"
  10.                     HorizontalAlignment="Stretch" Background="#000000"/>
  11. </UserControl>
复制代码
只需要创建一个ContentControl 父容器 就可以引入你创建的 PictureBoxHost类了
  1.     private async void UserControl_Loaded(object? sender, Avalonia.Interactivity.RoutedEventArgs e)    {
  2. <UserControl xmlns="https://github.com/avaloniaui"
  3.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  7.              x:Class="HB.Frame.Views.HKCamera"
  8.              Loaded="UserControl_Loaded">
  9.    
  10.     <ContentControl x:Name="MyContentControl" VerticalAlignment="Stretch"
  11.                     HorizontalAlignment="Stretch" Background="#000000"/>
  12. </UserControl>PictureBoxHost host= new PictureBoxHost();<UserControl xmlns="https://github.com/avaloniaui"
  13.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  14.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  15.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  16.              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  17.              x:Class="HB.Frame.Views.HKCamera"
  18.              Loaded="UserControl_Loaded">
  19.    
  20.     <ContentControl x:Name="MyContentControl" VerticalAlignment="Stretch"
  21.                     HorizontalAlignment="Stretch" Background="#000000"/>
  22. </UserControl>MyContentControl.Content = host;    }
复制代码
 
在这个示例中,我通过海康摄像头的窗口句柄将视频流成功渲染到了引入的WinForms PictureBox控件中。这利用了海康相机SDK,展示了Avalonia如何调用winform组件
 
注意: 记得在项目文件csproj里添加这2句
true
    true
 

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表