您的位置:

WinUI 3:下一代 Windows 桌面应用程序开发的新宠儿

WinUI 3是一个全新的用户界面框架,基于UWP(Universal Windows Platform)的XAML,可以用于桌面应用程序的开发。WinUI 3提供了一些重要的新特性,如多用户UI、灰度UI、可自定义UI,以及原生窗口嵌入等。本文将从多个方面详细介绍WinUI 3的特性和使用,供开发者参考。

一、WinUI 3 多用户

多用户UI是WinUI 3中一个非常重要的新特性。它允许多个用户在同一个桌面应用程序中共享同一个UI,每个用户都可以看到和操作同一个UI,但却不会相互影响。这主要得益于UWP中的ApplicationView类,该类可以使多个ApplicationView实例(称为多用户UI)共享同一个UI,同时与其他ApplicationView实例隔离。

接下来,我们看看如何在WinUI 3中实现多用户UI组件:

<!-- 定义用户界面 -->
<StackPanel x:Name="uiStackPanel">
  <Button Content="Click me!" Click="Button_Click"/>
</StackPanel>

private async void Button_Click(object sender, RoutedEventArgs e)
{
    // 创建一个新的 ApplicationView
    CoreApplicationView newView = CoreApplication.CreateNewView();
    int newViewId = 0;
    await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        Frame frame = new Frame();
        frame.Navigate(typeof(MainPage), null);
        Window.Current.Content = frame;
        Window.Current.Activate();

        newViewId = ApplicationView.GetForCurrentView().Id;
    });

    // 在新的 ApplicationView中显示多用户UI
    bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
        newViewId,
        ViewSizePreference.UseMore,
        ApplicationView.GetForCurrentView().Id,
        ViewSizePreference.UseHalf);
    if (viewShown)
    {
        uiStackPanel.Background = new SolidColorBrush(Colors.Red);
    }
}

二、WinUI 3 多用户

在WinUI 3中,VB(Visual Basic)开发人员也可以使用这个框架进行Windows桌面应用程序的开发。这给VB程序员带来了一个全新的、现代化的工具链,提高了整体的编程效率。值得注意的是,VB程序不能和C++/WinRT或C++/CX互操作。

接下来,我们看看如何用VB创建WinUI 3桌面应用:

' 创建空白的 WinUI 3 桌面应用程序
dotnet new winui-desktop -lang VB

' 编译和运行
dotnet build
dotnet run

三、WinUI 3设计器

WinUI 3提供了一个全新的可视化设计器,可以帮助开发人员快速创建UI,减少手动编写XAML的工作量。设计器可以根据预定义的UI模板、主题和颜色生成UI,并可根据需要进行自定义。设计器还支持导入和导出XAML文件,方便开发人员在不同的平台上进行交互。

接下来,我们看看WinUI 3设计器的一些主要特点:

  • 支持WPF,UWP和WinUI 3的项目创建和导入
  • 内置预定义的UI模板、主题和颜色
  • 可自定义视图和布局,支持颜色和主题切换
  • 支持XAML导入和导出

四、WinUI3 DLL

WinUI 3的DLL是与框架实现交互所必需的。它包含在NuGet软件包中,并可以通过Visual Studio工具安装。该DLL包含了框架的所有公共类和接口,作为WinUI应用程序的控制器。除此之外,还有一些其他的DLL可用,如Microsoft.UI.Xaml.dll和WindowsAppSDK.Desktop.dll,它们是WinUI 3的核心依赖项。

接下来,我们看看如何使用WinUI 3 DLL进行桌面应用程序开发:

' 安装WinUI 3工具包
Install-Package Microsoft.Windows.SDK.Contracts -Version 10.0.19041.1

' 使用WinUI 3 DLL 构建桌面应用程序
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Navigation;

namespace MyApp
{
   public sealed partial class MainPage : Page
   {
       public MainPage()
       {
           this.InitializeComponent();
       }

       protected override void OnNavigatedTo(NavigationEventArgs e)
       {
           base.OnNavigatedTo(e);
           myTextBox.Text = "Hello, WinUI 3!";
       }
   }
}

五、WinUI 3设计器

在WinUI 3中,开发人员可以将WinUI 3视为一种扩展MFC(Microsoft Foundation Class)应用程序的方法。通过将MFC应用程序的视图和用户界面与WinUI 3连接,可以快速创建具有现代化用户体验的应用程序。这使得MFC程序员可以使用WinUI 3的新功能,如灰度UI、自定义UI和可重用的WinUI控件。

接下来,我们看看如何使用WinUI 3扩展MFC应用程序:

//在MFC应用程序中初始化WinUI 3
void CMyApp::InitInstance()
{
    // 使用 Microsoft.UI.Xaml.App 封装 WinUI 3
    Microsoft::UI::Xaml::App^ app = ref new MyApp();

    // 使用 MFC CWinApp 实例作为窗口句柄
    app->Initialize(reinterpret_cast
   (m_pMainWnd->GetSafeHwnd()));

    CWinApp::InitInstance();
}

// 创建WinUI 3应用程序并运行
[Windows::Foundation::Metadata::WebHostHidden]
public ref class MyApp sealed : public Windows::UI::Xaml::Application
{
public:
   MyApp()
   {
      this->RequestedTheme = Windows::UI::Xaml::ApplicationTheme::Dark;
   }

protected:
   virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args) override
   {
      Windows::UI::Xaml::Controls::Frame^ rootFrame = ref new Windows::UI::Xaml::Controls::Frame();
      rootFrame->Navigate(TypeName(MyApp::typeid), nullptr);

      Windows::UI::Xaml::Window^ window = Windows::UI::Xaml::Window::Current;

      if (window->Content == nullptr)
      {
         window->Content = rootFrame;
      }

      window->Activate();
   }
};

   

六、WinUI 3 有前景吗?

WinUI 3在Windows桌面应用程序开发中具有很大的潜力。它提供了现代化、可扩展和可自定义的用户界面,使开发人员可以更快地构建出专业级的应用程序。除此之外,还有更多特性值得期待,如 WinUI 3 在 Windows 11 上的支持等等。

总之,WinUI 3是一个非常值得尝试的框架,它可以提高从WPF到UWP以及WinUI应用程序开发的生产率,给我们带来更好的开发体验和更高的用户体验。