Windows.UI.Xaml.Core.Direct 命名空间
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供 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 API:Windows 应用 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 API:Microsoft.UI.Xaml.Core.Direct.XamlTypeIndex (in the Windows 应用 SDK,请参阅Windows 应用 SDK命名空间) 。 |
示例
此示例演示如何通过 3 种方式创建对象、设置属性和使用标准 UIElement 接口:使用 XAML 标记、使用 C# 中的常规 XAML 类型以及使用 XamlDirect API 的新方法。
在此示例中,我们将创建一个 Border 元素和 一个 Rectangle 元素,并在每个元素上设置几个属性。 然后,将它们添加到 UI 元素树中。
- 使用 XAML 标记:
<Grid x:Name="RootGrid">
<Border BorderBrush="Black" BorderThickness="5">
<Rectangle Height="100" Width="100" Fill="Red" />
</Border>
</Grid>
- 使用具有完整 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);
- 使用 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 都可用于 XamlDirect。 XamlTypeIndex 枚举列出所有受支持的类型,XamlPropertyIndex 枚举列出所有支持的属性,XamlEventIndex 枚举列出所有受支持的事件。
支持的函数
可以使用 XamlDirect API 执行以下函数:
- 使用 XamlDirect.CreateInstance 为常规 Xaml 类型(如 Button)创建内部 Xaml 对象的实例。
- 根据属性的类型,使用 XamlDirect.Set-Property 方法的适当变体之一设置属性值。 例如,将 XamlDirect.SetColorProperty 用于 SolidColorBrush.Color 属性。 同样,使用 Get-Property 方法来访问特定属性。
- 使用 XamlDirect.AddToCollection 将项添加到集合(如 Panel.Children),并使用 XamlDirect.RemoveFromCollection 从集合中删除项。 XamlDirect 支持各种此类收集操作,包括 GetCollectionCount、 ClearCollection、 InsertIntoCollectionAt、 RemoveFromCollectionAt 和 GetXamlDirectObjectFromCollectionAt。
- 添加事件处理程序,例如使用 XamlDirect.AddEventHandler 的 Button.Click,同样使用 XamlDirect.RemoveEventHandler 删除事件处理程序。
XamlDirect.CreateInstance 返回的所有对象都是 IXamlDirectObject 类型。 所有其他 API(如 Set*Property API)都采用 IXamlDirectObject 作为其第一个参数。
若要将 IXamlDirectObject 转换为其完整的 APINDEX(例如 Button),请使用 XamlDirect.GetObject 方法。 同样,可以使用 XamlDirect.GetXamlDirectObject 从完整的 Object/DependencyObject 转换为其 XamlDirect 等效实例。