2010-09-13 4 views
0

J'utilise WinForms depuis le premier framework introduit et y investis beaucoup de temps et d'efforts. Maintenant, j'essaie de passer à WPF et, honnêtement, ce n'est pas si facile.Contrôle de positionnement et de reliure

Maintenant, j'ai une tâche, j'ai besoin de mettre en œuvre un assistant simple, dont chaque page a un groupe de contrôles aligné au centre. Le groupe contient un ensemble de boutons, quatre boutons d'affilée. La largeur du groupe est constante, la hauteur est variable - cela dépend du nombre de boutons à l'intérieur.

alt text

C'est une tâche simple pour WinForms, mais je ne sais pas comment le faire en utilisant XAML. J'ai trois questions:

1). Évidemment, les boutons à l'intérieur d'un groupe sont un WrapPanel qui est placé dans une cellule de Grid. C'est simple. Mais comment calculer la hauteur du WrapPanel ne pas utiliser le code derrière?

2). Quelle est la méthode recommandée pour implémenter l'assistant? Modèle de données ou une sorte de Tab Control? Je devrai probablement avoir des effets de transition lors du changement de page.

3). Est-il acceptable dans le monde WPF d'utiliser la liaison comme un moyen de repositionner les contrôles?

Merci d'avance!

Répondre

1

Le WrapPanel ajustera automatiquement sa hauteur en fonction de son contenu par défaut. WPF est un grand progrès de WinForms précisément à cause des nouveaux paradigmes de mise en page. Aucun code derrière n'est nécessaire pour tout ce que vous avez mentionné.

Comme pour 2; il y a beaucoup de façons de l'implémenter, en fonction de la façon dont vous adhérez à MVVM (le cas échéant); Je recommande d'abord d'utiliser un TabControl de style (vous pouvez ajuster le style pour présenter visuellement les étapes de l'assistant sous forme d'onglets, sans laisser l'utilisateur passer d'un onglet à l'autre), car c'est le plus simple. En outre, il est possible de lier à peu près tout à TabControl.

3 est possible, mais devrait être rarement nécessaire. Et je le pense.

Maintenant alors; un exemple simple pour vous montrer la puissance de WPF. Vous pouvez avoir dans votre ViewModel (si vous n'êtes pas familier avec MVVM google ou lire l'un des articles Josh Smith ou livre ou ... wow il y a une telle richesse d'informations là-dessus je ne sais pas lequel choisir) une collection d'objets, disons les classes Step, que vous pouvez lier à ItemsSource du TabControl. TabControl crée automatiquement un onglet pour chacune de vos étapes. A l'intérieur de votre classe Step, vous pouvez avoir une collection d'éléments, disons ... euh, Collection<Push> (j'ai du mal à utiliser des classes connues comme Action ou Button). Si le ItemTemplate du TabControl contient tout ce qui reconnaît cette collection, comme dans un ListBox stylisé en interne pour utiliser un WrapPanel pour son ItemsContainer, vous avez terminé: le template montrera la liste des Push dans un WrapPanel et c'est tout.

Maintenant, je ne devrais probablement pas écrire un tutoriel complet ici de toute façon, mais cela devrait vous aider à démarrer. Lisez sur DataTemplates, ItemsControl etc (encore une fois, j'ai des difficultés à choisir des ressources ... Dr. WPF a des articles géniaux sur les deux, mais ils pourraient être un peu avancés) et vous devriez être bon à faire. Rappelez-vous juste qu'il y a une bonne raison pour laquelle WPF propose des mises en page beaucoup plus fluides que n'importe quelle technologie de bureau précédente, vous devriez vous familiariser avec cela.

+0

Merci Alex! Je suis familier avec MVVM donc je ne serai pas un problème. Mais je ne comprends toujours pas comment positionner le WrapPanel: s'il est placé dans la cellule d'un Grid, alors il a fixé la hauteur == height de la cellule de la grille. –

+0

En fait, il aura seulement une hauteur fixe si vous le définissez comme tel. Si elle est contenue dans une cellule de la grille et nécessite plus d'espace (vous y ajoutez plus d'éléments), elle demandera plus d'espace et de mise en page; Si le parent refuse la demande d'espace supplémentaire, il sera plafonné au maximum autorisé par le parent. Tout cela est compliqué par un grand nombre de propriétés que vous pouvez définir, telles que les alignements horizontaux et verticaux, l'étirement, les scrolls, etc. et les sous-règles de disposition intégrées dans chaque contrôle. Cependant, si vous jouez dans le concepteur pendant un certain temps tout cela devrait devenir assez évident. –

+0

Merci, Alex! Tu as beaucoup aidé! –