Windows WinForms 中的工具包 XamlHostControl

Windows Toolkit XamlHostControl in WinForms

我正在尝试 运行 通过下面页面上的非常基本的示例,遵循 WinForms 的说明

https://docs.microsoft.com/en-us/windows/communitytoolkit/controls/wpf-winforms/windowsxamlhost

我在尝试将 WindowsXamlHost 控件拖到设计器上时总是遇到错误

我一直在MSDN论坛交流,这个过程描述了问题和我尝试过的,请看下面link Problem with WinForms

任何人都可以帮助解决我的问题。我真的需要尝试将一些现代 UPC 控件添加到我的 WinForms 程序中。

亲切的问候

史蒂夫

感谢您的反馈,我可以重现这个问题,它看起来 Visual Studio 奇怪的行为,请随意 post 在 Microsoft.Toolkit.Win32 github issue盒子。目前,有一个解决方法是在后面的代码中首字母 WindowsXamlHost,然后在下面的 InitializeComponent 方法中调用

对于 WinForms

private void CreateUWPControlsFirst()
{  
    Windows.UI.Xaml.Hosting.WindowsXamlManager.InitializeForCurrentThread();   
    Windows.UI.Xaml.Controls.Button myButton = new Windows.UI.Xaml.Controls.Button();
    myButton.Name = "button1";
    myButton.Width = 75;
    myButton.Height = 40;
    myButton.TabIndex = 0;
    myButton.Content = "button1";
    myButton.Click += MyButton_Click;

    Microsoft.Toolkit.Forms.UI.XamlHost.WindowsXamlHost myHostControl =
       new Microsoft.Toolkit.Forms.UI.XamlHost.WindowsXamlHost();           
    myHostControl.Name = "myWindowsXamlHostControl";

    myHostControl.Child = myButton;
    myHostControl.Height = 500;
    myHostControl.Width = 600;

    this.Controls.Add(myHostControl);
}

请注意:如果遇到Catastrophic failure" exception请添加app.manifest文件并写入以下内容,然后将win从应用程序的默认清单切换到app.manifest.(右击你的项目 -> application -> Manifest) 详情请参考 Matteo Pagani blog.

<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>

      <!-- Windows 10 -->
      <maxversiontested Id="10.0.18358.0"/>
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

    </application>
  </compatibility>

</assembly>

我在尝试使用 Visual Studio 2017 为 WinForms 实施 XAML Islands 时遇到了同样的问题,这就是我为解决该问题所做的工作。

我最初安装的是 Microsoft.Toolkit.Forms.UI.XamlHost 的 6.0 版。我卸载了那个版本,然后安装了 5.1 版。

然后我将我的项目升级为使用 .Net 4.6.2 或更高版本,并将 XAML 主机控件拖到对我有用的设计器上。

请注意,此站点 https://github.com/dotnet/wpf/issues/1290 似乎表明该问题已在更高版本中修复,但我无法使它们正常工作。