Buscar..


Parámetros

Método Descripción
ProporcionarValor La clase MarkupExtension solo tiene un método que debe ser anulado, el analizador XAML luego usa el valor proporcionado por este método para evaluar el resultado de la extensión de marcado.

Observaciones

Se puede implementar una extensión de marcado para proporcionar valores para las propiedades en un uso de atributo, propiedades en el uso de un elemento de propiedad o ambos.

Cuando se utiliza para proporcionar un valor de atributo, la sintaxis que distingue una secuencia de extensión de marcado a un procesador XAML es la presencia de la apertura y cierre de llaves ({y}). El tipo de extensión de marcado se identifica con el token de cadena que sigue a la llave de apertura.

Cuando se usa en la sintaxis del elemento de propiedad, una extensión de marcado es visualmente lo mismo que cualquier otro elemento utilizado para proporcionar un valor de elemento de propiedad: una declaración de elemento XAML que hace referencia a la clase de extensión de marcado como un elemento, encerrada entre paréntesis angulares (<>).

Para obtener más información, visite https://msdn.microsoft.com/en-us/library/ms747254(v=vs.110).aspx

Extensión de marcado utilizada con IValueConverter

Uno de los mejores usos de las extensiones de marcado es para facilitar el uso de IValueConverter. En el siguiente ejemplo, BoolToVisibilityConverter es un convertidor de valores, pero como es independiente de la instancia, se puede utilizar sin las molestias normales de un convertidor de valores con la ayuda de la extensión de marcado. En XAML solo usa

Visibility="{Binding [BoolProperty], Converter={[xmlns]:BoolToVisibilityConverter}}"

y puede establecer la visibilidad del elemento en bool value.

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;
        }
    }

Extensiones de marcado definidas por XAML

Hay cuatro extensiones de marcado predefinidas en XAML:

x:Type suministra el objeto Type para el tipo nombrado. Esta facilidad se utiliza más frecuentemente en estilos y plantillas.

<object property="{x:Type prefix:typeNameValue}" .../>

x:Static produce valores estáticos. Los valores provienen de entidades de código de tipo de valor que no son directamente el tipo del valor de una propiedad de destino, pero se pueden evaluar para ese tipo.

<object property="{x:Static prefix:typeName.staticMemberName}" .../>

x:Null especifica null como un valor para una propiedad y se puede usar para atributos o valores de elementos de propiedad.

<object property="{x:Null}" .../>

x:Array proporciona soporte para la creación de arreglos generales en la sintaxis XAML, para casos en los que el soporte de recopilación proporcionado por los elementos base de WPF y los modelos de control no se usa deliberadamente.

<x:Array Type="typeName">
  arrayContents
</x:Array>


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow