Win2D 快速入门和生成简单的 Win2D 应用主题都介绍了在使用 XAML 用户界面 (UI) 框架的项目中使用 Win2D。 但是,也可以在根本不使用 XAML 的项目中使用 Win2D。
本主题介绍如何在 UWP Core App 项目中使用 CanvasSwapChain 来显示 Win2D 内容。 可以在 Windows 和 Xbox 上运行生成的应用。 这种类型的应用程序也称为 CoreApplication 应用程序或 UWP DirectX 应用程序。
平台 API:IFrameworkViewSource、IFrameworkView、CoreWindow、CoreApplication、CoreApplicationView、CanvasSwapChain、CanvasDrawingSession
创建和配置新项目
我们将创建一个 XAML 项目来开始。 但是,我们会在继续操作时从中删除所有 XAML。
在 Visual Studio 中,从“空白应用(通用 Windows)”项目模板创建新项目。 对于语言,请选择:C#;平台:Windows;项目类型:UWP。
然后,若要设置项目以使用 Win2D,请参阅引用 Win2D NuGet 包。
修改项目文件
由于我们不会使用 XAML,因此请继续从项目中删除以下文件:
App.xaml、App.xaml.cs、MainPage.xaml和MainPage.xaml.cs。然后向项目添加一个新的类;将文件命名为
Program.cs。
将代码添加到 Program.cs
- 将
Program.cs的全部内容替换为以下代码列表:
// Program.cs
using Microsoft.Graphics.Canvas;
using Windows.ApplicationModel.Core;
using Windows.Graphics.Display;
using Windows.UI;
using Windows.UI.Core;
public sealed class App : IFrameworkViewSource, IFrameworkView
{
private CoreApplicationView view;
private CoreWindow window;
private CanvasSwapChain swapChain;
public IFrameworkView CreateView()
{
return this;
}
public void Initialize(CoreApplicationView applicationView)
{
this.view = applicationView;
}
public void SetWindow(CoreWindow window)
{
this.view.TitleBar.ExtendViewIntoTitleBar = true;
this.window = window;
}
public void Load(string entryPoint)
{
}
public void Run()
{
this.swapChain = CanvasSwapChain.CreateForCoreWindow(
resourceCreator: CanvasDevice.GetSharedDevice(),
coreWindow: this.window,
dpi: DisplayInformation.GetForCurrentView().LogicalDpi);
this.swapChain.ResizeBuffers((float)this.window.Bounds.Width, (float)this.window.Bounds.Height);
using (CanvasDrawingSession session = this.swapChain.CreateDrawingSession(Colors.Black))
{
session.DrawEllipse(155, 115, 80, 30, Colors.Cyan, 3);
session.DrawText("Hello, Win2D World!", 100, 100, Colors.Yellow);
}
this.swapChain.Present();
this.window.Activate();
this.window.Dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessUntilQuit);
}
public void Uninitialize()
{
}
}
public static class Program
{
public static void Main()
{
CoreApplication.Run(new App());
}
}
注意
此示例包含一个单独的 Program 类,其中包含程序的 Main 入口点,随后会启动实际的 CoreApplication 应用程序。 但不必将入口点置于单独的类中:如果希望采用这种方式构建代码,可以改为在 App 类的内部移动 Main 方法。 如果正在使用 C# 10 或更高版本,CoreApplication.Run(new App()); 表达式语句也可能位于顶级语句中。
即将完成
现在,可以继续生成并运行应用,会看到以下输出:

在应用模型方面,上一部分中的代码有一个 App 类,该类实现 IFrameworkViewSource 和 IFrameworkView 接口,这是 Core App 所必需的。 Main 函数入口点调用 CoreApplication.Run 来运行该 App 类的实例。
在图形方面,该代码为主 CoreWindow 创建了一个 CanvasSwapChain,并将内容绘制到其中。
可以采用喜欢的任何方式扩展上述示例应用。 例如,对于简单的 2D 游戏,这可能是一个很好的起点。