2010-05-30 4 views
0

Je voudrais créer un UserControl qui aura un certain comportement (effondrement animé ...) et quelques contrôles dedans (Rectangle, Ellipse, principalement à des fins de conception).UserControl qui est aussi une grille dans WPF

Cependant, j'ai besoin qu'il soit valide Panel comme Grid afin que je puisse y mettre plus de contrôles lors de la conception de la fenêtre principale. Les contrôles qui seront ajoutés au nouveau USerControl dans le temps de conception de la fenêtre principale n'ont pas besoin d'interagir avec les composants qui y sont ajoutés lors de la création d'un UserControl.

Comment est-ce que je devrais faire ceci? Dois-je étendre Control? Je préfère prolonger seulement UserControl.

+0

Cette question à moi n'est pas très claire, je sais. Je vais essayer de le réécrire quand j'ai le temps. – drasto

Répondre

0

Ce que je cherchais était la classe ContentPresenter en combinaison avec les propriétés de dépendance. Pour en savoir plus sur le sujet here ou here. Ou essayez this google search.

1

UserControl est un ContentControl qui possède la propriété Content et l'affiche généralement en fonction de ContentTemplate. Le point que je veux dire est que UserControl a 1 objet à l'intérieur de celui-ci. Bien sûr, vous pouvez ajouter la propriété Children à votre UserControl et gérer l'ajout/suppression de sous-éléments dans certains Grid internes à votre contrôle, mais ce n'est pas à quoi servent les contrôles de contenu.

Pour héberger de nombreux éléments, vous devez utiliser une sous-classe de Panel, comme Grid comme vous l'avez mentionné. Tous les panneaux ont une propriété Children avec une liste d'éléments disposés sur eux. Vous pouvez hériter de Grid et y placer un comportement. Par exemple. vous pouvez créer une propriété d'extension MyGrid.Collapsed, définissez-la sur les éléments de votre grille, afin qu'elle puisse organiser leurs positions.

Une autre option est de sous-classer ItemsControl. Les éléments placés dedans seront affichés selon son modèle ItemsPanel. Cette approche vous donne également un avantage de la propriété ItemsSource qui peut être utilisée pour afficher une liste de types de données arbitraires en générant des éléments à partir de ces propriétés à l'aide de la propriété ItemTemplate.