3 votes

Comment créer un ContentControl WPF personnalisé qui prend en charge le glisser-déposer au moment de la conception ?

Je veux créer un contrôle WPF personnalisé qui contient un seul contrôle "enfant". Sous-classement de ContentControl o UserControl fonctionne, mais présente un défaut : ces contrôles ne fonctionnent pas en mode designer.

Par "ne fonctionne pas", j'entends le scénario suivant : supposons que j'aie une Canvas avec mon contrôle personnalisé. Je veux mettre, disons, un Button sous mon contrôle. Je le fais glisser depuis la boite à outils, et il apparaît sous mon contrôle. Cependant, la vue XAML montre que le nouveau bouton appartient en fait à Canvas qui ne sont pas sous mon contrôle.

Je peux le placer à l'intérieur de mon contrôle en modifiant manuellement le XAML, mais je veux que le concepteur fonctionne également.

Il est intéressant de noter que lorsque je sous-classe Canvas , Grid o Panel Le concepteur fonctionne comme prévu. Cependant, ces contrôles ont beaucoup de enfants, ce qui n'est pas ce dont j'ai besoin.

Comment puis-je créer un contrôle à enfant unique qui fonctionne dans le designer ?

3voto

Markus Hütter Points 4187

Pourquoi ne pas hériter de Border ? de cette façon, vous vous épargnerez les tracas de l'extensibilité du concepteur.

1voto

Stephen Points 216

J'ai eu le même problème avec un contrôle de contenu que je suis en train de rédiger et j'ai trouvé une solution facile sur ce site. Fil de discussion StackOverflow .

Il suffit de mettre en œuvre le HitTestCore méthode :

protected override System.Windows.Media.HitTestResult HitTestCore(System.Windows.Media.PointHitTestParameters hitTestParameters)
{
    return new PointHitTestResult(this, hitTestParameters.HitPoint);
}

1voto

SDP190 Points 296

J'avais également une question similaire ici .

Mais après avoir creusé et creusé il semble que la vraie réponse est "NON" Il n'existe aucun moyen officiel de prendre en charge le glissement des contrôles directement dans un Content-Control personnalisé au moment de la conception, même en mettant en œuvre "HitTestCore" comme Stephan's La réponse suggère de ne pas activer le glisser-déposer au moment de la conception pour le ContentControl. .

Dans ce cas, vous devriez envisager d'hériter de Grid ou de Panel (pour autoriser plusieurs contrôles enfants), ou de Border (pour autoriser un seul enfant).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X