2010-08-19 4 views
1

Je crée un contrôle personnalisé dérivé de l'un des contrôles Standard WPF. Le contrôle a plusieurs parties constituantes, et je ne fais que modifier l'une de ces parties.Dois-je créer un contrôle personnalisé comme sans apparence?

Voici ma question: Si je modifie seulement une partie d'un contrôle, dois-je déclarer le contrôle comme sans apparence et reproduire l'ensemble du modèle de contrôle pour le contrôle modifié dans Generic.xaml, ou puis-je omettre la déclaration (trouvé dans le constructeur statique fourni par Visual Studio) et modifiez simplement le modèle de contrôle pour la partie que je développe?

J'ai essayé la dernière approche, et mon modèle de contrôle est ignoré. Je voudrais obtenir une confirmation avant de reproduire l'ensemble du modèle de contrôle, puisque ce que j'étend, c'est le calendrier WPF. Merci de votre aide.

Répondre

1

Il semble que votre meilleur pari est de coller l'ensemble du modèle et de modifier les pièces dont vous avez besoin, même si vous n'avez pas dit exactement ce que vous voulez faire ou publier du code.

De toute évidence, si ce que vous voulez changer dans le calendrier a une propriété que vous pouvez modifier dans xaml, alors c'est plus facile. L'extrême opposé serait de créer un contrôle personnalisé (sous-classe). Je voulais changer la couleur ou la flèche ComboBox l'autre jour et la façon la plus simple de le faire était de passer le gabarit entier dans un style et de l'appliquer au besoin, après avoir changé une seule partie du gabarit (la couleur de la flèche , bien sûr). Il n'y a pas de DP exposé à changer pour cela et je n'avais besoin de rien de plus compliqué que ça.

HTH,
Berryl

1

La déclaration qui est généré pour vous par défaut permet simplement d'un style par défaut implicite à définir pour votre contrôle au lieu de simplement prendre le style par défaut du type de base.

DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl))); 

Qu'est-ce qu'un lookless de contrôle n'est pas une déclaration spécifique, mais plutôt sa définition dans un fichier de code qui aura alors une ControlTemplate appliquée à au moment de l'exécution. L'alternative est le style UserControl de déclarer une classe XAML + code-behind qui compile dans une seule classe avec à la fois l'interface utilisateur et la logique.

Un exemple simple: Button n'est pas ce que vous voyez à l'écran et cliquez sur; Button est un contrôle qui peut prendre en charge un seul élément de contenu et traduire un clic d'utilisateur en un événement Click ou un appel de commande. Ce que vous voyez à l'écran est juste un modèle visuel au-dessus du comportement et de l'état inhérents de Button.

+0

L'exemple du bouton était vraiment utile pour m'aider à comprendre cela. Merci! –

Questions connexes