我可以在 WinUI3 应用程序中使用 WindowsFormsHost 吗?

问题描述 投票:0回答:1

我有一个 WinUI3 应用程序,我需要从我无法控制的旧版 SDK 托管 OpenGL 窗口。 OpenGL 需要 Windows 句柄和设备上下文才能工作。这些属性在 WindowsForms 控件中可用,但在 WinUI3 中不可用。作为解决方法,我尝试使用 WindowsFormsHost 来托管在 WPF 应用程序上正常工作的 WindowsForms UserControl。但是当我尝试在 WinUI3 应用程序中使用相同的解决方案时,我收到以下错误:

错误XLS0503“WindowsFormsHost”类型的值无法添加到“UIElementCollection”类型的集合或字典中。

我添加了必要的程序集引用,并且命名空间正确解析。这是 XAML 文件:

<?xml version="1.0" encoding="utf-8"?>
<Window
    x:Class="WinUI3OpenGLApp.OpenGLView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:WinUI3OpenGLApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:int="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
    xmlns:oglc="clr-namespace:OpenGLManagedLib;assembly=OpenGLManagedDll"
    mc:Ignorable="d">
    <Grid>
        <int:WindowsFormsHost x:Name="windowsFormsHost1">
            <oglc:OpenGLUserControl  x:Name="openGLUserControl1" />
        </int:WindowsFormsHost>
    </Grid>
</Window>

我知道 WinUI3 处理图形的方式与 WPF 和 WindowsForms 完全不同,因此,这一定是问题的根源。有没有办法解决这个问题,在 WinUI3 中托管 OpenGL 窗口?

c# opengl winui-3
1个回答
0
投票

可能需要在项目文件中将

UseWindowsForms
设置为
true
,例如:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0-windows</TargetFramework>
    <UseWindowsForms>True</UseWindowsForms>
...

来源:这篇文章。

© www.soinside.com 2019 - 2024. All rights reserved.