Windows Инструментарий XamlHostControl в WinForms - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь выполнить самый базовый пример c на странице ниже, следуя инструкциям для WinForms

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

Я продолжаю получать ошибки при перетаскивании элемента управления WindowsXamlHost на конструктор

Я общался на форумах MSDN, и этот процесс описывает проблему и то, что я пытался, см. по следующей ссылке Проблема с WinForms

Может кто-нибудь помочь, пожалуйста, с моей проблемой. Мне действительно нужно попытаться использовать некоторые современные элементы управления UP C в моей программе WinForms.

С уважением

Стив

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

У меня была такая же проблема при попытке реализовать XAML Islands для WinForms с использованием Visual Studio 2017, и вот что я сделал, чтобы обойти эту проблему.

Первоначально я установил версию 6.0 Microsoft.Toolkit. Forms.UI.XamlHost. Я удалил эту версию и вместо этого установил версию 5.1.

Затем я обновил свой проект до использования. Net 4.6.2 или более поздней версии, и перетаскивание элемента управления XAML Host в конструктор сработало для меня.

Обратите внимание, что этот сайт https://github.com/dotnet/wpf/issues/1290, похоже, указывает на то, что проблема была исправлена ​​в более поздних версиях, но я не мог заставить их работать.

0 голосов
/ 01 мая 2020

Спасибо за ваш отзыв, я могу воспроизвести эту проблему, и она выглядит странно, как Visual Studio, и, пожалуйста, не стесняйтесь опубликовать это в Microsoft.Toolkit.Win32 github. В настоящее время существует обходной путь, который инициализирует 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 файл и напишите содержимое ниже, затем переключите стандартный манифест приложения winfrom на app.manifest (щелкните правой кнопкой мыши ваш проект -> приложение -> манифест). подробнее просьба ссылаться на Маттео Пагани блог .

<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>
...