wpf
Extensiones de marcado
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>