Windows.UI.Xaml.Core.Direct 命名空间

提供 XamlDirect API,允许中间件在更基元的级别访问大部分 Xaml,从而实现更好的 CPU 和工作集性能。

XamlDirect

表示所有 XamlDirect API 的基类。 所有 XamlDirect API 都是此类的实例方法。

XamlDirect 是一个 API,用于在更基元级别访问 Xaml,以提高 CPU 和工作集性能。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.Core.Direct.XamlDirect (,请参阅) Windows 应用 SDK命名空间

接口

IXamlDirectObject

表示参与 XamlDirect API 集的主对象类型。

枚举

XamlEventIndex

列出 XamlDirect 中所有受支持的事件的枚举。

适用于 UWP 的等效 WinUI 2 APIWindows 应用 SDK中用于 WinUI 的 Microsoft.UI.Xaml.Core.Direct.XamlEventIndex (,请参阅) Windows 应用 SDK命名空间

XamlPropertyIndex

列出 XamlDirect 中所有支持的属性的枚举。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中用于 WinUI 的 Microsoft.UI.Xaml.Core.Direct.XamlPropertyIndex (,请参阅) Windows 应用 SDK命名空间

XamlTypeIndex

列出 XamlDirect 中所有受支持的类型的枚举。

适用于 UWP 的等效 WinUI 2 APIMicrosoft.UI.Xaml.Core.Direct.XamlTypeIndex (in the Windows 应用 SDK,请参阅Windows 应用 SDK命名空间) 。

示例

此示例演示如何通过 3 种方式创建对象、设置属性和使用标准 UIElement 接口:使用 XAML 标记、使用 C# 中的常规 XAML 类型以及使用 XamlDirect API 的新方法。

在此示例中,我们将创建一个 Border 元素和 一个 Rectangle 元素,并在每个元素上设置几个属性。 然后,将它们添加到 UI 元素树中。

  1. 使用 XAML 标记:
<Grid x:Name="RootGrid">
    <Border BorderBrush="Black" BorderThickness="5">
        <Rectangle Height="100" Width="100" Fill="Red" />
    </Border>
</Grid>
  1. 使用具有完整 XAML 类型的常规命令性代码:
Border border = new Border();
border.BorderBrush = new SolidColorBrush(Colors.Black);
border.BorderThickness = new Thickness(5);

Rectangle rectangle = new Rectangle();
rectangle.Height = 100;
rectangle.Width = 100;
SolidColorBrush rectBrush = new SolidColorBrush(Colors.Red);
rectangle.Fill = rectBrush;

border.Child = rectangle;

RootGrid.Children.Add(border);
  1. 使用 XamlDirect 代码:

以下代码的性能将高于使用完整 XAML 类型,因为各种元素上的所有操作(例如实例化和设置属性)都是通过 IXamlDirectObjects 而不是完整的 XAML 类型完成的。

XamlDirect xamlDirect = XamlDirect.GetDefault();

IXamlDirectObject border = XamlDirect.CreateInstance(XamlTypeIndex.Border);
xamlDirect.SetThicknessProperty(border, XamlPropertyIndex.Border_BorderThickness, new Thickness(5));

IXamlDirectObject borderBrush = XamlDirect.CreateInstance(XamlTypeIndex.SolidColorBrush);
xamlDirect.SetColorProperty(borderBrush, XamlPropertyIndex.SolidColorBrush_Color, Colors.Black);
xamlDirect.SetXamlDirectObjectProperty(border, XamlPropertyIndex.Border_BorderBrush, borderBrush);

IXamlDirectObject rectangle = XamlDirect.CreateInstance(XamlTypeIndex.Rectangle);
xamlDirect.SetDoubleProperty(rectangle, XamlPropertyIndex.FrameworkElement_Width, 100);
xamlDirect.SetDoubleProperty(rectangle, XamlPropertyIndex.FrameworkElement_Height, 100);

IXamlDirectObject rectBrush = XamlDirect.CreateInstance(XamlTypeIndex.SolidColorBrush);
xamlDirect.SetColorProperty(rectBrush, XamlPropertyIndex.SolidColorBrush_Color, Colors.Red);
xamlDirect.SetXamlDirectObjectProperty(rectangle, XamlPropertyIndex.Shape_Fill, rectangleBrush);

xamlDirect.SetXamlDirectObjectProperty(border, XamlPropertyIndex.Border_Child, rectangle);

RootGrid.Children.Add((UIElement) XamlDirect.GetObject(border));

注解

XamlDirect 专为主要使用命令性 API 创建 UI 而不是标记的 中间件而构建 。 使用 XamlDirect API,即使以命令性方式在代码中创建 UI,也可以使用 XAML 分析程序实现性能奇偶一致。

XamlDirect API 可以与传统 API 并排使用,并利用付费提高游戏性能。

并非所有 Xaml API 都可用于 XamlDirectXamlTypeIndex 枚举列出所有受支持的类型,XamlPropertyIndex 枚举列出所有支持的属性,XamlEventIndex 枚举列出所有受支持的事件。

支持的函数

可以使用 XamlDirect API 执行以下函数:

XamlDirect.CreateInstance 返回的所有对象都是 IXamlDirectObject 类型。 所有其他 API(如 Set*Property API)都采用 IXamlDirectObject 作为其第一个参数。

若要将 IXamlDirectObject 转换为其完整的 APINDEX(例如 Button),请使用 XamlDirect.GetObject 方法。 同样,可以使用 XamlDirect.GetXamlDirectObject 从完整的 Object/DependencyObject 转换为其 XamlDirect 等效实例。

另请参阅