Передача аргументов
Часто необходимо создавать экземпляры объектов с конструкторами, которым требуются аргументы или вызывать статический метод создания. Это можно сделать в XAML многоплатформенного пользовательского интерфейса приложений .NET (.NET MAUI) с помощью x:Arguments
атрибутов:x:FactoryMethod
- Атрибут
x:Arguments
используется для указания аргументов конструктора для конструктора, отличного от по умолчанию, или для объявления объекта метода фабрики. Дополнительные сведения см. в разделе "Аргументы конструктора передачи". - Атрибут
x:FactoryMethod
используется для указания метода фабрики, который можно использовать для инициализации объекта. Дополнительные сведения см. в разделе "Методы фабрики вызовов".
Кроме того, x:TypeArguments
атрибут можно использовать для указания аргументов универсального типа конструктору универсального типа. Дополнительные сведения см. в разделе "Указание аргумента универсального типа".
Аргументы можно передать конструкторам и методам фабрики с помощью следующих примитивов языка XAML .NET MAUI:
x:Array
, соответствующийArray
.x:Boolean
, соответствующийBoolean
.x:Byte
, соответствующийByte
.x:Char
, соответствующийChar
.x:DateTime
, соответствующийDateTime
.x:Decimal
, соответствующийDecimal
.x:Double
, соответствующийDouble
.x:Int16
, соответствующийInt16
.x:Int32
, соответствующийInt32
.x:Int64
, соответствующийInt64
.x:Object
, соответствующий параметруObject
.x:Single
, соответствующийSingle
.x:String
, соответствующийString
.x:TimeSpan
, соответствующийTimeSpan
.
Кроме того x:DateTime
, другие примитивы языка находятся в спецификации XAML 2009.
Примечание.
Примитив x:Single
языка можно использовать для передачи float
аргументов.
Передача аргументов конструктора
Аргументы можно передать в конструктор, отличный от по умолчанию, с помощью атрибута x:Arguments
. Каждый аргумент конструктора должен быть разделен в xml-элементе, который представляет тип аргумента.
В следующем примере показано использование атрибута x:Arguments
с тремя разными Color конструкторами:
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.9</x:Single>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.25</x:Single>
<x:Single>0.5</x:Single>
<x:Single>0.75</x:Single>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color>
<x:Arguments>
<x:Single>0.8</x:Single>
<x:Single>0.5</x:Single>
<x:Single>0.2</x:Single>
<x:Single>0.5</x:Single>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
Количество элементов в теге x:Arguments
и типы этих элементов должны соответствовать одному из Color конструкторов. Конструктор Color с одним параметром float
требует от 0 (черного) до 1 (белого). Конструктор Color с тремя параметрами требует float
красных, зеленых и синих значений от 0 до 1. Конструктор Color с четырьмя параметрами добавляет float
альфа-канал в качестве четвертого параметра.
Методы фабрики вызовов
Методы фабрики можно вызывать в XAML .NET MAUI, указав имя метода с помощью x:FactoryMethod
атрибута и его аргументы с помощью атрибута x:Arguments
. Метод фабрики — это public static
метод, который возвращает объекты или значения того же типа, что и класс или структура, определяющие методы.
Класс Color определяет ряд методов фабрики, а следующий пример демонстрирует вызов трех из них:
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromRgba">
<x:Arguments>
<x:Byte>192</x:Byte>
<x:Byte>75</x:Byte>
<x:Byte>150</x:Byte>
<x:Byte>128</x:Byte>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromHsla">
<x:Arguments>
<x:Double>0.23</x:Double>
<x:Double>0.42</x:Double>
<x:Double>0.69</x:Double>
<x:Double>0.7</x:Double>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
<BoxView HeightRequest="150"
WidthRequest="150"
HorizontalOptions="Center">
<BoxView.Color>
<Color x:FactoryMethod="FromHex">
<x:Arguments>
<x:String>#FF048B9A</x:String>
</x:Arguments>
</Color>
</BoxView.Color>
</BoxView>
Количество элементов в теге x:Arguments
и типы этих элементов должны соответствовать аргументам вызываемого метода фабрики. Метод FromRgba
фабрики требует четырех byte
аргументов, представляющих красные, зеленые, синие и альфа-значения, от 0 до 255 соответственно. Метод FromHsla
фабрики требует четырех float
аргументов, представляющих оттенки, насыщенность, светимость и альфа-значения, от 0 до 1 соответственно. Для FromHex
метода фабрики требуется аргумент, представляющий шестнадцатеричный string
цвет RGB.
Указание аргумента универсального типа
Аргументы универсального типа для конструктора универсального типа можно указать с помощью x:TypeArguments
атрибута, как показано в следующем примере:
<StackLayout>
<StackLayout.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,20,0,0" />
<On Platform="Android" Value="5, 10" />
</OnPlatform>
</StackLayout.Margin>
</StackLayout>
Класс OnPlatform
является универсальным классом и должен быть создан с помощью атрибута x:TypeArguments
, соответствующего целевому типу. On
В классе Platform
атрибут может принимать одно string
значение или несколько значений с разделителями-запятымиstring
. В этом примере StackLayout.Margin
свойство имеет значение для конкретной Thickness
платформы.
Дополнительные сведения о аргументах универсального типа см. в разделе "Универсальные" в XAML.