Na prática, controles personalizados são algo que você implementa no nível do código enquanto pode usar o XAML para controles do usuário. Os controles personalizados estendem uma das classes base de controle do WPF e fornecem funcionalidade adicional por meio do código, para que toda a lógica e representação adicionadas sejam implementadas dentro do código.
Um controle de usuário é tecnicamente um controle de conteúdo normal que você pode estender em algumas partes do código, mas geralmente é estendido colocando outros controles dentro dele. Assim como Kent mencionou, um UserControl é uma agregação de outros controles. Isso limita consideravelmente o que você pode fazer com um controle de usuário. É mais fácil de usar, mas mais limitado do que um controle personalizado completo.
Esses controles têm uma pequena diferença do ponto de vista do tempo de execução. Ao criar um aplicativo e colocar um UserControl nele, a árvore de controle terá um modelo concreto de UserControl dentro dele. Portanto, se considerarmos um exemplo esfarrapado de um botão especializado. Se você estivesse usando um controle de usuário, adicionaria um botão dentro do <UserControl>
elemento. Ao usar um controle personalizado, você derivará o próprio controle de um botão provavelmente. A diferença seria visível na árvore lógica.
Embora o controle personalizado forneça uma árvore lógica semelhante a
O UserControl daria uma árvore lógica de
Portanto, no final, o UserControl é apenas um ContentControl normal, que você pode estender um pouco e para o qual você pode predefinir o conteúdo. O controle personalizado fornece maior flexibilidade ao preço da facilidade de implementação, pois você precisa fazer toda a lógica e interação no código, em vez de ter o benefício do XAML.
Apesar de tudo isso, acho que não há muita diferença nos modelos do Visual Studio. Provavelmente, o Controle Personalizado do Visual Studio apenas cria um projeto com um controle personalizado vazio, enquanto o projeto Controle de Usuário é um projeto com um controle de usuário vazio. Posteriormente, você pode adicionar qualquer tipo de item ao projeto.
Atualizar
E minha opinião sobre quando usar o controle personalizado e o controle do usuário é que, se você pode fazer algo com um controle de usuário e o elemento de controle extra na árvore lógica não o incomoda, use um controle de usuário, pois eles são muito mais fáceis de usar. criar e manter. Use um controle personalizado apenas se você tiver um motivo para não usar um controle de usuário.