Classe DesignModeValueProvider
Captures property changes that are made by the user in the designer and provides new values at design time.
Hierarquia de herança
System.Object
Microsoft.Windows.Design.Features.FeatureProvider
Microsoft.Windows.Design.Model.DesignModeValueProvider
Namespace: Microsoft.Windows.Design.Model
Assembly: Microsoft.Windows.Design.Interaction (em Microsoft.Windows.Design.Interaction.dll)
Sintaxe
'Declaração
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
O tipo DesignModeValueProvider expõe os membros a seguir.
Construtores
Nome | Descrição | |
---|---|---|
DesignModeValueProvider | Initializes a new instance of the DesignModeValueProvider class. |
Início
Propriedades
Nome | Descrição | |
---|---|---|
Properties | Obtém o conjunto de propriedades para capturar. |
Início
Métodos
Nome | Descrição | |
---|---|---|
Equals | Determina se o especificado Object é igual a atual Object. (Herdado de Object.) | |
Finalize | Permite que um objeto tentar liberar recursos e executar outras operações de limpeza antes que ele é recuperado pela coleta de lixo. (Herdado de Object.) | |
GetHashCode | Serves as a hash function for a particular type. (Herdado de Object.) | |
GetType | Obtém o Type da instância atual. (Herdado de Object.) | |
InvalidateProperty | Invalida a propriedade especificada. | |
MemberwiseClone | Cria uma cópia superficial do atual Object. (Herdado de Object.) | |
ToString | Retorna um string que representa o objeto atual. (Herdado de Object.) | |
TranslatePropertyValue | Captura de alterações de propriedade que foram feitas pelo usuário no designer e usa a lógica personalizada para fornecer novos valores em tempo de design. |
Início
Comentários
Quando um usuário altera um valor de propriedade de um objeto no designer, que valor geralmente é definido no objeto no designer. Usando o DesignModeValueProvider classe, você pode inserir sua própria lógica para este processo. Por exemplo, embora você deseja que o usuário ser capaz de definir a propriedade visible de um controle para false, o controle ainda deve estar visível em tempo de design.
To accomplish this, you create a DesignModeValueProvider and attach it to your custom control. O DesignModeValueProvider alterações de propriedade de capturas que faz com que o usuário, que você inserir sua própria lógica na TranslatePropertyValue método, e DesignModeValueProvider passa os novos valores para o designer.
Importante |
---|
When you use this technique, the behavior of a property in the designer does not match the value of the property in XAML view. XAML view displays the value that the user entered at design time. O valor no modo de exibição XAML representa o comportamento que a propriedade apresenta em tempo de execução. |
As seguintes restrições se aplicam ao usar o DesignModeValueProvider a classe para alterar um valor de propriedade em tempo de design.
Você só pode definir um provedor de valor de tempo de design em tipos que derivam de DependencyObject classe.
Você só pode definir um provedor de valor de tempo de design nas propriedades de dependência.
O DesignModeValueProvider implementação deve definir o valor de tempo de design em uma propriedade do tipo base. Você pode implementar o seu provedor de valor para o tipo específico de derivados de destino. Por exemplo, para registrar um provedor de valor para o Height propriedade da Button classe, você deve registrá-lo na FrameworkElement classe e teste para o tipo de destino na implementação de provedor de valor. For more information, see Walkthrough: Alterar o comportamento de uma propriedade em tempo de design.
Provedores de valor são executados na ordem em que eles são registrados. O provedor de valor mais recente que está registrado para uma propriedade é executado pela última vez; No entanto, todos os provedores de valor são executados.
Se seu provedor de valor TranslatePropertyValue implementação retorna nulluma referência nula (Nothing no Visual Basic), o valor da propriedade tempo de design é definido como nulluma referência nula (Nothing no Visual Basic).
Se seu provedor de valor TranslatePropertyValue implementação retorna o valor estático UnsetValue, o WPF Designer chamadas de ClearValue método na propriedade.
Observação |
---|
Se você estiver escrevendo um provedor de valor para um controle do Silverlight, você deve usar a versão do WPF do UnsetValue. Esta é uma limitação da WPF Designer framework. |
Provedores de valor não funcionam com as propriedades do WPF herdada. Por exemplo, registrando um provedor de valor de FlowDirection não funciona como esperado no modo de design.
Se o valor da propriedade é definido por uma ligação, seu provedor de valor deve retornar um Binding em vez de um valor calculado.
Alguns provedores de valor não ser honrados porque o designer talvez precise forçar uma propriedade para um valor específico de tempo de design para garantir uma experiência de design específico. Por exemplo, um provedor personalizado de valor para as propriedades de fonte não funciona como esperado na WPF Designer.
Quando você registra um provedor de valor usando o TypeIdentifier, o identificador de tipo é passado para o TranslatePropertyValue implementação pode não ser o mesmo estiver especificado nos metadados de tempo de design. Será equivalente, mas talvez não seja a mesma instância. Se o seu provedor de valor executa a verificação de tipo, você deve resolver o componente de tipo de identificador de propriedade e executar um teste de equivalência de tipo no tipo resolvido. Normalmente, você simplesmente verificar se o nome da propriedade, mas se você precisar executar lógica no tipo, você precisa resolver o identificador de tipo. Use o ResolveType método para obter o tipo correto.
O WPF Designer framework pode passar um identificador de tipo em qualquer um dos vários formatos com suporte. Se o seu provedor de valor executa uma comparação de tipo, o identificador de tipo deve ser resolvido para um tipo real. Use o ResolveType método para obter o tipo correto.
Exemplos
O exemplo a seguir cria um personalizado DesignModeValueProvider que está anexado a um controle de botão personalizado. In the TranslatePropertyValue method, you change the Content property of the Button so that it appears uppercase in the designer. You also change the Background property of the Button so that it appears with the default system color in the designer. These changes affect the designer only. At run time, the Content and the Background properties appear with the values set by the user.
For more information, see Walkthrough: Alterar o comportamento de uma propriedade em tempo de design.
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);
}
}
}
Acesso thread-safe
Quaisquer membros static (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.
Consulte também
Referência
Namespace Microsoft.Windows.Design.Model
Outros recursos
Como: alterar o comportamento de uma propriedade em tempo de design
Arquitetura de extensibilidade Designer WPF