Pergunta

Eu fiz recentemente um UserControl , que teve um bom tempo, porque eu tinha que trabalhar com personalizado propriedades de dependência e assim por diante ...

De qualquer forma, era apenas um monte de 3 controles:. TextBox, pop-up com hierárquica árvore

Agora eu percebi que eu provavelmente poderia escrever um ControlTemplate somente. Assim o que é o benefício do uso de UserControl ?

Foi útil?

Solução

Há três casos a considerar aqui: UserControl, ControlTemplate, e personalizados Controle. (Eu estou supondo um DataTemplate não precisa de explicação)

A costume de Controle é algo que você fornece quando você cria funcionalidade básica de um novo componente UI. Há vários prós e contras para isso, mas, por exemplo, se você quiser comportamento de seleção personalizada de um ItemsControl, você poderia fazê-lo melhor por subclasse Selector ou MultiSelector (a WPFToolkit DataGrid faz isso). Além disso, se você quer um objeto que conteria uma nova DependencyProperty, você vai na maioria dos casos derivar de Control.

O princípio WPF contida aqui é o "lookless" paradigma de controle, ou "não se esqueça de esperar que alguém templates seu controle, ou pelo menos torná-lo comportar-se muito bem em seu próprio cenário template". Controles personalizados são geralmente criados com reutilização em mente, muitas vezes, como partes de dlls-quadro.

A ControlTemplate é, essencialmente, uma descrição de uma árvore visual de substituição, e pode ser definido de forma explícita na FrameworkElements, ou como parte de um estilo. Esta é a opção que você deve visar quando seu objetivo é principalmente para fazer um pedido e ser feito com ele. Você pode fazer quase qualquer coisa com um ControlTemplate visualmente, se você é capaz de obter as ligações e gatilhos (e a possível contendo próprio estilo) certas. Tudo isso pode ser declarado como um recurso de uma reutilizados, para dar a sua aplicação um "tema" comum.

A UserControl é um controle composto auto-suficiente, com peças individualmente editáveis ??no designer, e é melhor utilizado se você precisa ver seus componentes e gerenciá-los no designer. A ControlTemplate, por outro lado, não irá expor seus componentes para a manipulação no designer (embora seja visível). Você normalmente criar um UserControl para uma página de detalhes do cliente, ou um navegador de exposição do produto, ou de qualquer caso em que você não quer criar um controle full-blown, mas quer Vista detalhada com o apoio de designer completo.

Um caso especial aqui é se você usar o href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" rel="noreferrer"> MVVM padrão

(Para mais informações sobre MVVM, entre muitos outros, Google para Josh Smith, Sacha Barber e artigos fantásticos de Karl Shifflett)

Outras dicas

Se você estiver adicionando suas próprias propriedades de dependência, então você vai precisar de sua própria classe sobre a qual a defini-los.

Como você deseja aplicar um modelo para a classe, esta classe personalizada terá que derivam de Control (como UserControl faz).

O principal benefício de escrever sua própria classe derivada de Control é que ele pode ter o seu modelo redefinidos para outros cenários de uso, por você dentro do aplicativo, ou por outros usuários do tipo.

Há muito pouca sobrecarga no uso da classe UserControl. Na verdade, se você olhar para ele em Reflector.NET, você vai ver que ele quase não tem qualquer código. Principalmente, UserControl apenas redefine os metadados em algumas propriedades de dependência existentes (tais como tornar o valor padrão de FocusableProperty false.)

A menos que você precisa para redefinir o modelo do controle imediatamente, você pode deixá-lo como um UserControl para agora e alterá-lo mais tarde, se necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top