Настройка платформы WPF

Preview label

Xamarin.Formsподдерживает предварительную версию Windows Presentation Foundation (WPF), платформа .NET Framework и .NET Core 3. В этой статье показано, как добавить проект WPF, предназначенный для платформа .NET Framework, в Xamarin.Forms решение.

Внимание

Xamarin.Forms Поддержка WPF предоставляется сообществом. Дополнительные сведения см. в разделе Xamarin.Forms "Поддержка платформы".

Прежде чем начать, создайте новое Xamarin.Forms решение в Visual Studio 2019 или используйте существующее Xamarin.Forms решение, например BoxViewClock. Приложения WPF можно добавлять только в Xamarin.Forms решение в Windows.

Добавление приложения WPF

Следуйте приведенным ниже инструкциям, чтобы добавить приложение WPF, которое будет работать на настольных компьютерах Windows 7, 8 и 10:

  1. В Visual Studio 2019 щелкните правой кнопкой мыши имя решения в Обозреватель решений и выберите "Добавить > новый проект...".

  2. В окне "Добавление нового проекта" выберите C# в раскрывающемся списке "Языки", выберите Windows в раскрывающемся списке "Платформы" и выберите "Рабочий стол" в раскрывающемся списке "Тип проекта". В списке типов проектов выберите приложение WPF (платформа .NET Framework):

    Screenshot shows the Add a new project dialog box with W P F App selected.

    Нажмите кнопку "Далее ".

    Примечание.

    Xamarin.Forms 4.7 включает поддержку приложений WPF, работающих в .NET Core 3.

  3. В окне "Настройка нового проекта" введите имя проекта с расширением WPF, например BoxViewClock.WPF. Нажмите кнопку "Обзор", выберите папку BoxViewClock и нажмите клавишу SELECT Folder, чтобы поместить проект WPF в тот же каталог, что и другие проекты в решении:

    Screenshot shows the Configure you new project dialog box with values for Project name, Location, and Framework.

    Нажмите кнопку "Создать", чтобы создать проект.

  4. В Обозреватель решений щелкните правой кнопкой мыши новый проект BoxViewClock.WPF и выберите "Управление пакетами NuGet...". Выберите вкладку "Обзор" и выполните поискXamarin.Forms. Platform.WPF:

    Select the NuGet package

    Выберите пакет и нажмите кнопку "Установить ".

  5. Щелкните правой кнопкой мыши имя решения в Обозреватель решений и выберите "Управление пакетами NuGet для решения...". Выберите вкладку Обновления и выберите Xamarin.Forms пакет. Выберите все проекты и обновите их до одной Xamarin.Forms версии:

    Update the NuGet package

  6. В проекте WPF щелкните правой кнопкой мыши ссылки и выберите "Добавить ссылку...". В диалоговом окне "Диспетчер ссылок" выберите "Проекты" слева и проверка поле проверка box рядом с проектом BoxViewClock:

    Reference the shared project

    Нажмите кнопку "ОК ".

  7. Измените файл MainWindow.xaml проекта WPF. В теге Window добавьте объявление пространства имен XML для Xamarin.Formsобъекта . Сборка и пространство имен Platform.WPF :

    xmlns:wpf="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF"
    

    Теперь измените Window тег wpf:FormsApplicationPageна . Измените Title параметр на имя приложения, например BoxViewClock. Готовый XAML-файл должен выглядеть следующим образом:

    <wpf:FormsApplicationPage x:Class="BoxViewClock.WPF.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:BoxViewClock.WPF"
            xmlns:wpf="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF"            
            mc:Ignorable="d"
            Title="BoxViewClock" Height="450" Width="800">
        <Grid>
    
        </Grid>
    </wpf:FormsApplicationPage>
    
  8. Измените файл MainWindow.xaml.cs проекта WPF. Добавьте две новые using директивы:

    using Xamarin.Forms;
    using Xamarin.Forms.Platform.WPF;
    

    Измените базовый класс MainWindow на WindowFormsApplicationPage. InitializeComponent После вызова добавьте следующие две инструкции:

    Forms.Init();
    LoadApplication(new BoxViewClock.App());
    

    За исключением комментариев и неиспользуемых using директив, полный MainWindows.xaml.cs файл должен выглядеть следующим образом:

    using Xamarin.Forms;
    using Xamarin.Forms.Platform.WPF;
    
    namespace BoxViewClock.WPF
    {
        public partial class MainWindow : FormsApplicationPage
        {
            public MainWindow()
            {
                InitializeComponent();
    
                Forms.Init();
                LoadApplication(new BoxViewClock.App());
            }
        }
    }
    
  9. Щелкните правой кнопкой мыши проект WPF в Обозреватель решений и выберите "Задать в качестве запускаемого проекта". Нажмите клавишу F5, чтобы запустить программу с отладчиком Visual Studio на рабочем столе Windows:

    WPF BoxView Clock

Особенности платформы

Вы можете определить, на какой платформе Xamarin.Forms работает приложение из кода или XAML. Это позволяет изменять характеристики программы при работе в WPF. В коде сравнивайте значение Device.RuntimePlatform с Device.WPF константой (которая равна строке WPF). Если есть совпадение, приложение работает в WPF.

В XAML можно использовать OnPlatform тег для выбора значения свойства, относящееся к платформе:

<Button.TextColor>
    <OnPlatform x:TypeArguments="Color">
        <On Platform="iOS" Value="White" />
        <On Platform="macOS" Value="White" />
        <On Platform="Android" Value="Black" />
        <On Platform="WPF" Value="Blue" />
    </OnPlatform>
</Button.TextColor>

Размер окна

Вы можете настроить начальный размер окна в файле WPF MainWindow.xaml :

Title="BoxViewClock" Height="450" Width="800"

Проблемы

Это предварительная версия, поэтому следует ожидать, что не все готово к работе. Не все пакеты NuGet готовы Xamarin.Forms для WPF, и некоторые функции могут не полностью работать.

Xamarin.Forms Видео поддержки WPF 3.0