一、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应用程序开发的生产率,给我们带来更好的开发体验和更高的用户体验。