Поиск…


параметры

метод Описание
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>


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow