Como: Alterar o comportamento de uma propriedade em time de design
Quando você usa extensibilidade para personalizar o Windows Presentation Foundation (WPF) Designer for Visual Studio, você geralmente irá criar controles personalizados.Algumas vezes, é necessário uma propriedade do controle para se comportar de maneira diferente no tempo de design que ao tempo de execução, enquanto ainda permite que o usuário definir o valor da propriedade normalmente.Por exemplo, você quiser que o usuário poderá definir a propriedade visível de um controle false,mas o controle ainda deve estar visível no tempo de design.
Descreve os procedimentos para alterar a design-time behavior de controle personalizado propriedades.Para obter um exemplo mais detalhado que orienta detalhadamente através de procedimentos, consulte Demonstra Passo a passo: Alterar o comportamento de uma propriedade em time de design.
Observação importante: |
---|
Quando você usa essa técnica, o comportamento de uma propriedade no designer não coincide com o valor da propriedade no modo XAML.XAML exibe o valor que o usuário inseriu em tempo de design.O valor no modo XAML representa o comportamento que a propriedade irá apresentar em tempo de execução. |
Se você deseja apenas determinar se um controle está em tempo de design e definir suas propriedades de acordo, consulte Como: Determinar se um controle personalizado está em time de design ou time de execução.
Criando um DesignModeValueProvider personalizado
Nesse procedimento você criar uma classe DesignModeValueProvider Personalizada.No método TranslatePropertyValue, você adiciona lógica personalizada para o novo comportamento das propriedades que você deseja alterar.Essas alterações afetam somente o criador.Em tempo de execução, as propriedades se comportar conforme definido pelo usuário.
Para criar um DesignModeValueProvider personalizado
Em seu projeto, adicione uma referência ao seguinte conjunto de módulos (assembly):
- Microsoft.Windows.Design.Extensibility
Adicionar uma nova classe ao projeto controle personalizado e editar a classe para herdar de DesignModeValueProvider.O código deve se parecer com o seguinte:
Public Class YourCustomDesignModeValueProvider Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider End Class
class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider { }
Adicione um método à classe.No Construtor de você identificar as propriedades que você deseja capturar.
Public Sub New() 'Properties.Add(<The Property To Change Goes Here>) 'More properties can go here. End Sub
public YourCustomDesignModeValueProvider() { //Properties.Add(<The Property To Change Goes Here>); //More properties can go here. }
Substituir o método TranslatePropertyValue na classe.Isso é onde você especificar o novo comportamento das propriedades em tempo de design.
Public Overrides Function TranslatePropertyValue(ByVal identifier As Microsoft.Windows.Design.Model.PropertyIdentifier, ByVal value As Object) As Object 'If identifier.DependencyProperty Is <Property To Change> Then ' ' Custom logic goes here. 'End If 'More custom logic for more properties can go here. Return MyBase.TranslatePropertyValue(identifier, value) End Function
public override object TranslatePropertyValue(Microsoft.Windows.Design.Model.PropertyIdentifier identifier, object value) { //if (identifier.DependencyProperty == <The Property To Change>) //{ // Custom logic goes here. //} //More custom logic for more properties can go here. return base.TranslatePropertyValue(identifier, value); }
Observação: Nesse procedimento, você criar um DesignModeValueProvider que lida com duas propriedades diferentes.Você também pode criar vários objetos DesignModeValueProvider para manipular as propriedades diferentes.
Anexando a DesignModeValueProvider ao controle personalizado
Nesse procedimento você anexar DesignModeValueProvider para o controle personalizado, usando o atributo FeatureAttribute.
Anexando a DesignModeValueProvider ao controle personalizado
Localize a declaração de classe para o controle personalizado.O código deve se parecer com o seguinte:
Public Class YourCustomControl
class YourCustomControl
Adicione um atributo FeatureAttribute para a declaração de classe e especifique o DesignModeValueProvider que você criou no procedimento anterior.
<Microsoft.Windows.Design.Features.Feature(GetType(YourCustomDesignModeValueProvider))> _ Public Class YourCustomControl
[Microsoft.Windows.Design.Features.Feature(typeof(YourCustomDesignModeValueProvider))] class YourCustomControl
Observação: Você também pode anexar um DesignModeValueProvider a um controle personalizado usando o armazenamento de metadados.Para obter mais informações, consulte Armazenamento de metadados e Como: Use o Repositório de Metadados.
Consulte também
Outros recursos
Tempo de design versus Run Time comportamento