Windows.UI.Xaml.Core.Direct Пространство имен
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет API XamlDirect , которые позволяют ПО промежуточного слоя получать доступ к большей части Xaml на более примитивном уровне, обеспечивая лучшую производительность ЦП и рабочих наборов.
Классы
XamlDirect |
Представляет базовый класс для всех API XamlDirect. Все API XamlDirect являются методами экземпляра этого класса. XamlDirect — это API для доступа к Xaml на более примитивном уровне для повышения производительности ЦП и рабочего набора. Эквивалентный API WinUI 2 для UWP: Microsoft.UI.Xaml.Core.Direct.XamlDirect (для WinUI в Windows App SDK см. Windows App SDK пространства имен). |
Интерфейсы
IXamlDirectObject |
Представляет тип первичного объекта, который участвует в наборе API XamlDirect . |
Перечисления
XamlEventIndex |
Перечисление со списком всех поддерживаемых событий в XamlDirect. Эквивалентный API WinUI 2 для UWP: Microsoft.UI.Xaml.Core.Direct.XamlEventIndex (для WinUI в Windows App SDK см. Windows App SDK пространства имен). |
XamlPropertyIndex |
Перечисление со списком всех поддерживаемых свойств в XamlDirect. Эквивалентный API WinUI 2 для UWP: Microsoft.UI.Xaml.Core.Direct.XamlPropertyIndex (для WinUI в Windows App SDK см. Windows App SDK пространства имен). |
XamlTypeIndex |
Перечисление со списком всех поддерживаемых типов в XamlDirect. Эквивалентный API WinUI 2 для UWP: Microsoft.UI.Xaml.Core.Direct.XamlTypeIndex (для WinUI в Windows App SDK см. Windows App SDK пространства имен). |
Примеры
В этом примере показано, как создавать объекты, задавать свойства и интерфейсы со стандартными элементами UIElements 3 способами: с помощью разметки XAML, обычными типами XAML в C# и новым способом с помощью API XamlDirect .
В этом примере мы создадим элементы Border и Rectangle и задаем несколько свойств для каждого из них. Затем мы добавим их в дерево элементов пользовательского интерфейса.
- Использование разметки 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 для создания пользовательского интерфейса вместо разметки. С помощью API XamlDirect можно достичь четности производительности с помощью средства синтаксического анализа XAML даже при императивном создании пользовательского интерфейса в коде.
XamlDirect API можно использовать параллельно с традиционными API и воспользоваться преимуществами повышения производительности с оплатой за игру.
Не все API Xaml доступны в XamlDirect. Перечисление XamlTypeIndex содержит список всех поддерживаемых типов, перечисление XamlPropertyIndex — все поддерживаемые свойства, а перечисление XamlEventIndex — все поддерживаемые события.
Поддерживаемые функции
С помощью API XamlDirect можно выполнять следующие функции:
- Создайте экземпляр внутреннего объекта Xaml для обычного типа Xaml, например Button, с помощью XamlDirect.CreateInstance.
- Задайте значения свойств, используя один из соответствующих вариантов метода XamlDirect.Set-Property на основе типа свойства. Например, используйте XamlDirect.SetColorProperty для свойства SolidColorBrush.Color . Аналогичным образом используйте методы Get-Property для доступа к определенным свойствам.
- Добавьте элемент в коллекцию, например Panel.Children, с помощью XamlDirect.AddToCollection и удалите элементы из коллекций с помощью XamlDirect.RemoveFromCollection. XamlDirect поддерживает различные операции сбора, включая GetCollectionCount, ClearCollection, InsertIntoCollectionAt, RemoveFromCollectionAt и GetXamlDirectObjectFromCollectionAt.
- Добавьте обработчик событий, например Button.Click с помощью XamlDirect.AddEventHandler , и аналогично удалите обработчики событий с помощью XamlDirect.RemoveEventHandler.
Все объекты, возвращаемые XamlDirect.CreateInstance , имеют тип IXamlDirectObject. Все остальные API, такие как API Set*Property, принимают IXamlDirectObject в качестве первого параметра.
Чтобы преобразовать IXamlDirectObject в полный APINDEX, например Button, используйте метод XamlDirect.GetObject . Аналогичным образом можно использовать XamlDirect.GetXamlDirectObject для преобразования из полного объекта Object/DependencyObject в эквивалентный экземпляр XamlDirect.