Compartilhar via


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
Método público DesignModeValueProvider Initializes a new instance of the DesignModeValueProvider class.

Início

Propriedades

  Nome Descrição
Propriedade pública Properties Obtém o conjunto de propriedades para capturar.

Início

Métodos

  Nome Descrição
Método público Equals Determina se o especificado Object é igual a atual Object. (Herdado de Object.)
Método protegido 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.)
Método público GetHashCode Serves as a hash function for a particular type. (Herdado de Object.)
Método público GetType Obtém o Type da instância atual. (Herdado de Object.)
Método protegido InvalidateProperty Invalida a propriedade especificada.
Método protegido MemberwiseClone Cria uma cópia superficial do atual Object. (Herdado de Object.)
Método público ToString Retorna um string que representa o objeto atual. (Herdado de Object.)
Método público 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.

Observação importanteImportante

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çãoObservaçã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

Propriedade de edição de arquitetura

Recurso provedores e conectores de recursos