wpf
Расширения разметки
Поиск…
параметры
метод | Описание |
---|---|
ProvideValue | Класс MarkupExtension имеет только один метод, который должен быть переопределен, тогда парсер XAML использует значение, предоставленное этим методом, для оценки результата расширения разметки. |
замечания
Расширение разметки может быть реализовано для предоставления значений свойств в использовании атрибутов, свойств в использовании элементов свойств или обоих.
При использовании для предоставления значения атрибута синтаксис, который отличает последовательность расширения разметки к процессору XAML, представляет собой наличие открывающих и закрывающих фигурных скобок ({и}). Тип расширения разметки затем идентифицируется маркером строки сразу же после открытия фигурной скобки.
При использовании в синтаксисе элементов свойств расширение разметки визуально совпадает с любым другим элементом, используемым для предоставления значения элемента свойства: объявление элемента XAML, которое ссылается на класс расширения разметки как на элемент, заключенный в угловые скобки (<>).
Для получения дополнительной информации посетите https://msdn.microsoft.com/en-us/library/ms747254(v=vs.110).aspx
Расширение разметки, используемое с IValueConverter
Одним из лучших применений для расширений разметки является упрощение использования IValueConverter. В приведенном ниже примере BoolToVisibilityConverter представляет собой преобразователь значений, но поскольку он независим от экземпляра, он может использоваться без нормальных хэшей преобразователя значений с помощью расширения разметки. В XAML просто используйте
Visibility="{Binding [BoolProperty], Converter={[xmlns]:BoolToVisibilityConverter}}"
и вы можете установить видимость элемента для значения bool.
public class BoolToVisibilityConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Visibility)
{
if ((Visibility)value == Visibility.Visible)
return true;
else
return false;
}
else
return false;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
Расширения с расширением XAML
В XAML есть четыре предопределенных расширения разметки:
x:Type
предоставляет объект Type для именованного типа. Это средство чаще всего используется в стилях и шаблонах.
<object property="{x:Type prefix:typeNameValue}" .../>
x:Static
создает статические значения. Значения относятся к объектам кода типа значений, которые не являются непосредственно типом значения свойства target, но могут быть оценены для этого типа.
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
x:Null
указывает значение null как значение свойства и может использоваться как для атрибутов, так и для значений элементов свойств.
<object property="{x:Null}" .../>
x:Array
обеспечивает поддержку создания общих массивов в синтаксисе XAML, в случаях, когда поддержка коллекции, предоставляемая базовыми элементами WPF и моделями управления, намеренно не используется.
<x:Array Type="typeName">
arrayContents
</x:Array>