Windows.UI.Xaml.Core.Direct Namespace
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece APIs XamlDirect que permitem que o middleware acesse a maior parte do Xaml em um nível mais primitivo, alcançando melhor desempenho de CPU e conjunto de trabalho.
Classes
XamlDirect |
Representa a classe base para todas as APIs XamlDirect. Todas as APIs XamlDirect são métodos de instância fora dessa classe. XamlDirect é uma API para acessar o Xaml em um nível mais primitivo para melhorar o desempenho da CPU e do conjunto de trabalho. API equivalente do WinUI 2 para UWP: Microsoft.UI.Xaml.Core.Direct.XamlDirect (para WinUI no SDK do Aplicativo Windows, consulte os namespaces SDK do Aplicativo Windows). |
Interfaces
IXamlDirectObject |
Representa o tipo de objeto primário que participa do conjunto XamlDirect de APIs. |
Enumerações
XamlEventIndex |
Enumeração que lista todos os eventos com suporte no XamlDirect. API equivalente do WinUI 2 para UWP: Microsoft.UI.Xaml.Core.Direct.XamlEventIndex (para WinUI no SDK do Aplicativo Windows, consulte os namespaces SDK do Aplicativo Windows). |
XamlPropertyIndex |
Enumeração que lista todas as propriedades com suporte no XamlDirect. API equivalente do WinUI 2 para UWP: Microsoft.UI.Xaml.Core.Direct.XamlPropertyIndex (para WinUI no SDK do Aplicativo Windows, consulte os namespaces SDK do Aplicativo Windows). |
XamlTypeIndex |
Enumeração que lista todos os tipos com suporte no XamlDirect. API equivalente do WinUI 2 para UWP: Microsoft.UI.Xaml.Core.Direct.XamlTypeIndex (para WinUI no SDK do Aplicativo Windows, consulte os namespaces SDK do Aplicativo Windows). |
Exemplos
Este exemplo demonstra como criar objetos, definir propriedades e interface com UIElements padrão de três maneiras: usando marcação XAML, usando tipos XAML regulares em C# e a nova maneira de usar APIs XamlDirect .
Neste exemplo, criamos um elemento Border e um elemento Rectangle e definimos algumas propriedades em cada um. Em seguida, os adicionamos à árvore de elementos da interface do usuário.
- Usando a marcação XAML:
<Grid x:Name="RootGrid">
<Border BorderBrush="Black" BorderThickness="5">
<Rectangle Height="100" Width="100" Fill="Red" />
</Border>
</Grid>
- Usando código imperativo regular, com tipos XAML completos:
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);
- Usando o código XamlDirect :
O código a seguir terá um desempenho maior do que o uso de tipos XAML completos, pois todas as operações como instanciação e configuração de propriedades em vários elementos são realizadas por meio de IXamlDirectObjects em vez dos tipos XAML completos.
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));
Comentários
O XamlDirect é uma finalidade criada para middleware que usa predominantemente APIs imperativas para criar interface do usuário em vez de marcação. Com as APIs XamlDirect , você pode obter paridade de desempenho com o analisador XAML mesmo ao criar a interface do usuário imperativamente no código.
XamlDirect As APIs podem ser usadas lado a lado com APIs tradicionais e aproveitar o pagamento por melhorias no desempenho do jogo.
Nem todas as APIs Xaml estão disponíveis com XamlDirect. A enumeração XamlTypeIndex lista todos os tipos com suporte, a enumeração XamlPropertyIndex lista todas as propriedades com suporte e a enumeração XamlEventIndex lista todos os eventos com suporte.
Funções suportadas
Você pode executar as seguintes funções usando APIs XamlDirect:
- Crie uma instância de um objeto Xaml interno para um tipo Xaml regular, como Button, usando XamlDirect.CreateInstance.
- Defina valores de propriedade usando uma das variantes apropriadas do método XamlDirect.Set-Property com base no tipo da propriedade. Por exemplo, use XamlDirect.SetColorProperty para a propriedade SolidColorBrush.Color . Da mesma forma, use Get-Property métodos para acessar propriedades específicas.
- Adicione um item a uma coleção, como Panel.Children, usando XamlDirect.AddToCollection e remova itens de coleções usando XamlDirect.RemoveFromCollection. O XamlDirect dá suporte a uma variedade dessas operações de coleção, incluindo GetCollectionCount, ClearCollection, InsertIntoCollectionAt, RemoveFromCollectionAt e GetXamlDirectObjectFromCollectionAt.
- Adicione um manipulador de eventos, como Button.Click usando XamlDirect.AddEventHandler e, da mesma forma, remova manipuladores de eventos usando XamlDirect.RemoveEventHandler.
Todos os objetos retornados por XamlDirect.CreateInstance são do tipo IXamlDirectObject. Todas as outras APIs, como as APIs set*property, assumem um IXamlDirectObject como seu primeiro parâmetro.
Para converter um IXamlDirectObject em seu APINDEX completo, por exemplo, um Botão, use o método XamlDirect.GetObject . Da mesma forma, você pode usar XamlDirect.GetXamlDirectObject para converter de um Object/DependencyObject completo para sua instância equivalente XamlDirect.