Je suis à la recherche d'opinion sur l'utilisation des panneaux en toile vs. Grid dans WPF. Je dois faire des formulaires d'entrée classiques qui ont essentiellement des présentations de grille, certains peuvent avoir de petits datagramrids à l'intérieur, des boîtes de groupe, mais toutes alignées dans la mise en page de la grille. J'ai du mal à utiliser un panneau de grille ou de toile pour toutes mes formes. La grille me donne une bonne structure; Je peux maintenir l'alignement des contrôles plus facilement. J'aurai une classe de base (qui hérite de la classe de fenêtre) pour toutes les fenêtres, afin que les designer de Visual Studio seront inutiles, car il a des problèmes pour ce type d'héritage et avec un panneau de grille, je n'ai même pas vraiment besoin de concepteur et je peux Définir le sizétocontent de la fenêtre afin que tout ira bien. Mais encore une fois avec la toile, j'ai la capacité de positionner des contrôles de n'importe quelle manière que j'aime, et cela ne bénéficie que de voir lorsque vous utilisez la toile. P>
Je n'ai pas eu d'expérience dans le document WPF pour prédire sur quels types de problèmes pourrais-je obtenir des demandes de clients sur la mise en page. Sur les formulaires Web, j'utilise parfois un positionnement absolu pour les formulaires, au cas où le client dispose d'une requête "spéciale", que de contrôler le pixel de contrôle à droite ou à gauche soit plus élevé, etc. Tout le monde a travaillé avec des clients exigeants savoir ce que je veux dire. P>
J'aimerais voir ce que vous pensez, quels sont les avantages et les inconvénients des deux membres de la mise en page de formulaire de formulaire de candidature? Pourquoi est-ce qu'un meilleur que l'autre? Des cas où un groupe spécial serait mauvais d'utilisation, et d'autres non? Quels sont les inconvénients d'un panneau à un autre? Quel panneau utiliseriez-vous? P>
merci p>
5 Réponses :
La toile est principalement destinée aux fonctionnalités de dessin personnalisées que toute autre chose. La grille est définitivement le meilleur choix disponible pour personnaliser votre mise en page. P>
Je suis d'accord avec Csharperwithjava -
Vous voudrez aller avec une mise en page à base de grille ou de panneau. Jetez un coup d'œil à la vue d'ensemble de MSDN du système de mise en page WPF: msdn.microsoft.com /en-us/library/ms745058.aspx
Voici un didacticiel pour vous faire démarreur avec des présentations de grille: wpftorial.net/gridlayout.html
définitivement em> les grilles semblent être ce dont vous avez besoin pour vos besoins. P>
Je voudrais comparer des grilles aux tables HTML (très utile lorsqu'il est utilisé de manière appropriée), tandis que la toile ressemble davantage à un div. La différence étant que les grilles sont quelles tables doivent être en HTML et de même avec la toile VS de Div. P>
sur le thème des grilles, prenez le temps de définir vos lignes et des colonnesDéfinitions, plutôt que de mettre de la marge sur vos commandes pour positionner tout correctement. Vous le regretterez si vous ne le faites pas. P>
Hein ... vous savez que l'utilisation de tables à des fins de présentation n'est pas recommandée, non?
Absolument, mais pour des raisons de cet exemple, je voulais que quelque chose à utiliser comme exemple, j'ai pensé que ce serait le meilleur exemple. Comme je l'ai mentionné, les grilles dans WPF sont quelles tables essayaient d'être en HTML.
Vous pouvez devenir assez en profondeur avec la disposition réelle de la grille, la colonne / la rangée, la largeur, la hauteur, etc. p>
À mon avis, il serait plus facile de faire la mise en page des différents éléments sur une grille en contrôlant la rangée et la colonne TIMZZ que tout faire de sorte que tout est codé dur dans une toile. Cela facilitera également les choses s'ils décident de changer les résolutions plus tard sur la route. P>
de Adam Nathan's WPF Unleashed em> (p. 168): P>
Vous pouvez également être créatif avec le contenu de vos commandes dans la grille pour avoir un niveau de contrôle de la disposition plus fin. p>
Une toile serait bonne pour quelque chose comme une boîte de dialogue qui changera rarement la taille et que quelques contrôles ne contiennent que quelques contrôles, car il prendrait du temps de prendre du temps pour les jeter tout au fur et à mesure que le nombre augmente. p>
J'utilise personnellement des grilles moi-même. Il peut s'agir d'un peu plus de travail pour poser des choses au niveau du pixel, mais pour les 5% du temps nécessaire, cela vaut la peine d'abstraire beaucoup de tracas. Il est également agréable quand il est nécessaire de redimensionner des lignes et des colonnes à la volée, le plativité de la grille fait qu'un claquement. p>
Même si vous ne pouvez pas utiliser VS Designer, vous pouvez toujours utiliser un concepteur Visual XAML pour créer / modifier votre contenu de la grille. p>
L'un des principaux avantages UX de WPF / SL / XAML est la capacité de mise en page de «liquide» de type HTML. Même si vous n'en avez peut-être pas besoin avec votre design actuel, c'est clairement l'avenir et vaut bien la peine d'apprendre à la finesse. P>
Vérifiez l'excellente liste d'excellente la liste de Editeurs XAML p>
Lien brisé, corrigez-vous
J'irais avec une grille ou une sous-classe de grille spécialisée. Vous avez raison de voir l'héritage. Le concepteur Visual Studio In UWP, WPF génère un code de support pour la base et la sous-classe avec les mêmes noms de méthodes. Cela ne compile pas.
Puisque les génériques de pré-date, nous pouvons retourner aux méthodologies précédentes. L'un d'entre eux est une classe d'assistance. Chaque point de vue des implements La mise en œuvre complète peut bien nécessiter l'utilisation de ibaseview code> et possède une propriété
ViewHelper code> ou
ViewHelper
Enum ViewHelperoptions Code> Peut être nécessaire. Si nécessaire, chacun des visiteurs peut utiliser l'héritage sans casser le concepteur visuel. Cela permet d'utiliser du code générique ainsi que du code de vue spécifique sans casser le modèle MVVM. Appelons-le à MVHVM alors que la viewHelper a connaissance de la viewHelper. Cela sépare en outre le V du VM. P>
activator.createInstance code>. Une autre considération est les constructeurs qui sont invoqués par le concepteur. Vous devez déplacer tout le code «Will-Crash-SI-NU-PAS-RUNING» dans une initialisation engendrée de (dire) l'événement chargé. Sinon, vous pouvez utiliser (UWP): p>