DesignModeValueProvider (Clase)
Captura los cambios de propiedades que realiza el usuario en el diseñador y proporciona nuevos valores en tiempo de diseño.
Jerarquía de herencia
System.Object
Microsoft.Windows.Design.Features.FeatureProvider
Microsoft.Windows.Design.Model.DesignModeValueProvider
Espacio de nombres: Microsoft.Windows.Design.Model
Ensamblado: Microsoft.Windows.Design.Interaction (en Microsoft.Windows.Design.Interaction.dll)
Sintaxis
'Declaración
Public Class DesignModeValueProvider _
Inherits FeatureProvider
public class DesignModeValueProvider : FeatureProvider
public ref class DesignModeValueProvider : public FeatureProvider
type DesignModeValueProvider =
class
inherit FeatureProvider
end
public class DesignModeValueProvider extends FeatureProvider
El tipo DesignModeValueProvider expone los siguientes miembros.
Constructores
Nombre | Descripción | |
---|---|---|
DesignModeValueProvider | Inicializa una nueva instancia de la clase DesignModeValueProvider. |
Arriba
Propiedades
Nombre | Descripción | |
---|---|---|
Properties | Obtiene el conjunto de propiedades que deben capturarse. |
Arriba
Métodos
Nombre | Descripción | |
---|---|---|
Equals | Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de Object). | |
Finalize | Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object). | |
GetHashCode | Actúa como función hash para un tipo concreto. (Se hereda de Object). | |
GetType | Obtiene el objeto Type de la instancia actual. (Se hereda de Object). | |
InvalidateProperty | Invalida la propiedad especificada. | |
MemberwiseClone | Crea una copia superficial del objeto Object actual. (Se hereda de Object). | |
ToString | Devuelve una cadena que representa el objeto actual. (Se hereda de Object). | |
TranslatePropertyValue | Captura los cambios de propiedad realizados por el usuario en el diseñador y usa lógica personalizada para proporcionar nuevos valores en tiempo de diseño. |
Arriba
Comentarios
Cuando un usuario cambia un valor de propiedad de un objeto en el diseñador, ese valor se establece normalmente en el objeto en el diseñador. La clase DesignModeValueProvider le permite insertar su propia lógica en este proceso. Por ejemplo, supongamos que desea que el usuario pueda establecer la propiedad visible de un control en false, pero que el control siga estando visible en tiempo de diseño.
Para llevarlo a cabo, creará un DesignModeValueProvider y lo asociará al control personalizado. DesignModeValueProvider captura los cambios de propiedad realizados por el usuario, se inserta una lógica propia en el método TranslatePropertyValue y DesignModeValueProvider pasa los nuevos valores al diseñador.
Importante |
---|
Cuando se utiliza esta técnica, el comportamiento de una propiedad en el diseñador no coincide con el valor de la propiedad en la vista XAML. La vista XAML muestra el valor que el usuario especificó en tiempo de diseño. El valor en la vista XAML representa el comportamiento que muestra la propiedad en tiempo de ejecución. |
Las siguientes restricciones se aplican al usar la clase DesignModeValueProvider para cambiar un valor de propiedad en tiempo de diseño.
Puede establecer solo un proveedor de valor en tiempo de diseño en los tipos que derivan de la clase DependencyObject.
Puede establecer solo un proveedor de valor en tiempo de diseño en propiedades de dependencia.
Su implementación DesignModeValueProvider debe establecer el valor en tiempo de diseño en una propiedad de tipo base. Puede implementar su proveedor de valor para tener como destino el tipo derivado concreto. Por ejemplo, para registrar un proveedor de valor para la propiedad Height de la clase Button, debe registrarlo en la clase FrameworkElement y probar el tipo de destino en la implementación del proveedor de valor. Para obtener más información, vea Tutorial: Cambiar el comportamiento de una propiedad en tiempo de diseño.
Los proveedores se ejecutan en el orden en el que se registran. En último lugar se ejecuta el proveedor de valores más reciente que se registra para una propiedad; sin embargo, se ejecutan todos los proveedores de valores.
Si la implementación TranslatePropertyValue de su proveedor de valor devuelve nullreferencia null (Nothing en Visual Basic), el valor en tiempo de diseño de la propiedad se establece en nullreferencia null (Nothing en Visual Basic).
Si la implementación TranslatePropertyValue de su proveedor de valor devuelve el valor estático UnsetValue, WPF Designer llama al método ClearValue en la propiedad.
Nota
Si está escribiendo un proveedor de valores para un control de Silverlight, debe usar la versión de WPF de UnsetValue. Se trata de una limitación del marco de WPF Designer.
Los proveedores de valor no funcionan con las propiedades heredadas de WPF. Por ejemplo, registrar un proveedor de valor para FlowDirection no funciona como se espera en modo de diseño.
Si un enlace establece el valor de propiedad, su proveedor de valor debe devolver Binding en lugar de un valor calculado.
Puede ser que algunos proveedores de valores no se acepten porque el diseñador puede necesitar obligar una propiedad a un valor en tiempo de diseño concreto para asegurar una experiencia de diseño determinada. Por ejemplo, un proveedor de valor personalizado para las propiedades de la fuente no funciona tal y como se espera en WPF Designer.
Al registrar un proveedor de valor usando TypeIdentifier, el identificador de tipo que se pasa a su implementación TranslatePropertyValue no puede ser igual que el que se especifica en los metadatos en tiempo de diseño. Será equivalente, pero es posible que no sea la misma instancia. Si su proveedor de valores realiza la comprobación de tipo, debe resolver el componente de tipo del identificador de propiedad y realizar una prueba de la equivalencia de tipo en el tipo resuelto. Normalmente, simplemente se comprueba el nombre de la propiedad, pero si debe realizar la lógica en el tipo, necesita resolver el identificador de tipo. Use el método ResolveType para obtener el tipo correcto.
El marco WPF Designer puede pasar un identificador de tipo en cualquiera de los diferentes formatos compatibles. Si su proveedor de valor realiza la comparación de tipo, debe resolver el identificador de tipo como un tipo real. Use el método ResolveType para obtener el tipo correcto.
Ejemplos
En el ejemplo siguiente crea un DesignModeValueProvider personalizado que se adjunta a un control de botón personalizado. En el método TranslatePropertyValue, cambie la propiedad Content de Button para que se muestre en mayúsculas en el diseñador. Puede cambiar también la propiedad Background de Button para que aparezca con el color predeterminado del sistema en el diseñador. Estos cambios sólo afectan al diseñador. En tiempo de ejecución, las propiedades Content y Background aparecen con los valores establecidos por el usuario.
Para obtener más información, vea Tutorial: Cambiar el comportamiento de una propiedad en tiempo de diseño.
Imports System
Imports System.Windows 'SystemColors
Imports System.Windows.Media 'SolidColorBrush
Imports System.Windows.Controls 'Button
Imports Microsoft.Windows.Design.Model 'DesignModeValueProvider
Imports Microsoft.Windows.Design.Metadata
Namespace CustomButton
Public Class CustomButtonDesignModeValueProvider
Inherits DesignModeValueProvider
Public Sub New()
Properties.Add(GetType(Button), "Content")
Properties.Add(GetType(Button), "Background")
End Sub
Public Overrides Function TranslatePropertyValue( _
ByVal item As ModelItem, _
ByVal identifier As PropertyIdentifier, _
ByVal value As Object) As Object
If identifier.DeclaringType Is GetType(Button) And _
identifier.Name = "Content" Then
Return value.ToString().ToUpper()
End If
If identifier.DeclaringType Is GetType(Button) And _
identifier.Name = "Background" Then
Return New SolidColorBrush(SystemColors.ControlColor)
End If
Return MyBase.TranslatePropertyValue(item, identifier, value)
End Function
End Class
End Namespace
using System;
using System.Windows; //SystemColors
using System.Windows.Media; //SolidColorBrush
using System.Windows.Controls; //Button
using Microsoft.Windows.Design.Model;
using Microsoft.Windows.Design.Metadata; //DesignModeValueProvider
namespace CustomButton
{
class CustomButtonDesignModeValueProvider : DesignModeValueProvider
{
public CustomButtonDesignModeValueProvider()
{
Properties.Add( typeof(Button), "Content");
Properties.Add(typeof(Button), "Background");
}
public override object TranslatePropertyValue(ModelItem item, PropertyIdentifier identifier, object value)
{
if (identifier.DeclaringType == typeof( Button ) &&
identifier.Name == "Content" )
{
return ((string)value).ToUpper();
}
if (identifier.DeclaringType == typeof(Button) &&
identifier.Name == "Background")
{
return new SolidColorBrush(SystemColors.ControlColor);
}
return base.TranslatePropertyValue(item, identifier, value);
}
}
}
Seguridad para subprocesos
Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Vea también
Referencia
Microsoft.Windows.Design.Model (Espacio de nombres)
Otros recursos
Cómo: Cambiar el comportamiento de una propiedad en tiempo de diseño
Arquitectura de extensibilidad de WPF Designer
Arquitectura de edición de propiedades
Proveedores de características y conectores de características