Comment allez-vous mettre en place un système de fenêtrage de la boîte à outils d'accueil comme indiqué dans l'expression mélangé où vous pouvez accéder à des fenêtres de la boîte à outils de bassin de nombreuses manières les unes des autres, se chevauchant comme des onglets ou des fenêtres de niveau supérieur flottant. Mon système devrait se comporter à peu près la même chose que dans l'expression mélangé. De plus, la façon dont je reçois des signaux visuels où la fenêtre de la boîte à outils ferait une quai lors du glisser est exactement ce dont j'ai besoin.
Il n'y a qu'une seule exécutation: En mélange lors du glisser sur une fenêtre de la boîte à outils déjà supérieure (déchirée), je ne peux que le fermer comme une onglet remplissant la fenêtre entière. Cependant, j'ai besoin d'un système où il n'y a pas de différence entre une fenêtre de la boîte à outils et la fenêtre principale. Je dois pouvoir accéder aux fenêtres dans une fenêtre de la boîte à outils tout comme dans la fenêtre principale. P>
Notez également qu'en raison d'une stratégie interne, je ne peux utiliser aucune source ouverte ou 3ème. Bibliothèque de parti pour cela. strong> p> Je serais intéressé par la façon dont vous serez configuré la conception de la classe générale pour quelque chose comme ça? J'aimerais rester aussi générique que possible afin qu'il puisse être utilisé pour de nombreux scénarios différents. P> Le comportement de Dockeing est comme dans la photo suivante. L'image centrale montre la région d'amarrage de la glissage sensorielle. Et les images extérieures où la fenêtre SNAP SNAP: P> Texte ALT HTTP: //img196.imageshack.us/img196/2450/dockingregions.png P> Généralement, je suis confronté aux problèmes de maire ici: Comment concevoir le modèle de programmation (comment les configurations d'accueil sont-elles persisté dans XAML) et comment puis-je mettre en œuvre de manière acutale la fonctionnalité sous-jacente. Ma première nécessité serait que j'aimerais savoir une symbiose d'un dockpanel et d'un tabcontrol. Quelque chose dans les lignes de ceci: p> bien sûr cela n'a pas encore de sens. L'amarrage ne peut pas être définie de cette façon et le problème de fenêtrage n'est pas encore adressé ici. Mais j'aime l'idée de définir l'amarrage et les groupes de tabults simplement en définissant certaines propriétés sur le DockTabitem. Je ne voudrais vraiment pas introduire des contrôles supplémentaires comme des groupes de tabas ou similaires. J'aime la façon dont le comportement d'amarrage dans le dockpanel juste en définissant l'ordre des enfants et la propriété attachée du quai. Bien sûr, mon amarrage sera un peu plus complexe et se comporte plus de choses comme ce que fait la grille. P> p>
4 Réponses :
WPF a déjà des contrôles qui soutiennent l'amarrage (ou cet effet). Vérifiez que le livre WPF de Adam Nathan's WPF WPF Unleashed , il le couvre dans la partie 2. P>
La commande d'accueil WPF n'autorise pas l'utilisateur d'extrémité B> de contrôler l'amarrage car elle ne fournit pas d'interface utilisateur pour déplacer les fenêtres d'aménagées, etc.
Au chapitre 6, Adam a un exemple intitulé "Mettre tout ensemble: créer un volet de Visual Studio ressemblant à des studios visuels". Cela semble être exactement ce que Bitbonk a demandé.
L'exemple d'Adam ne vous permet pas de réorganiser l'amarrage de Windows 'qui est ce que je pense que Bitbonk demande. Tous les exemples d'Adam vous permettent de redimensionner et de masquer / afficher deux volets codés dur toujours amarrés du même côté de la fenêtre. Aucune traînée et goutte ou la réorganisation des vitres ne sont incluses.
Pour soutenir les scénarios vous illustrez dans votre question un seul OnDragEnter & OnDragOver: p>
OnDragLeave: p>
OnDragDrop: p>
Naturellement vous devez également gérer glisser sur la barre de titre et appeler DoDragDrop sur l'objet source. P>
Les deux complexités ici sont: p>
Pour un algorithme simple j'estimer qu'il faudrait une semaine pour obtenir toutes les rides aplanies. Si vous avez besoin d'une structure de données très complexe et la structure elle-même est non évidente, il pourrait prendre du temps sérieux à la figure cette partie dehors. P> DockPanel code> suffirait, tout ce que vous devez écrire est pour les gestionnaires OnDragEnter, OnDragOver, OnDragLeave et OnDragDrop. J'utilise généralement un seul gestionnaire d'événements, car la manipulation de ces quatre événements est si semblable: p>
Je n'ai pas aimé avoir vu cette réponse bulled, car il décrit vraiment certaines des pièces de début à une solution auto-construite (avec un certain nombre d'autres choses, comme Adorner code> S).
Il y a une grande bibliothèque d'accueil WPF que quelqu'un a publié sur CodeProject.com, qui a la fonctionnalité que vous recherchez. Je l'ai utilisé une fois, et je l'ai eu assez bien. P>
Vérifiez ici ici: http://www.codeproject.com/kb/ WPF / WPFDockingLib.aspx P>
Comme je l'ai déjà mentionné, je peux utiliser tout ce qui n'est pas écrit Sois moi? Maintenant, je ne suis même pas sûr que je ne peux même pas regarder comment les autres l'ont mis en place pour éviter (involontairement) voler des idées ou des détails de mise en œuvre.
La bibliothèque d'accueil semble être le meilleur pari de visualiser et d'écrire votre code. Si vous venez de passer en revue comment il a été mis en œuvre, il n'y a probablement aucun problème avec «vol». Une idée b> ne peut pas être protégée par le droit d'auteur - une implémentation particulière de l'idée. Examiner cela et les autres recommandations sur cette page, puis proposez votre propre façon de le faire.
@Bitbonk: Mais vous êtes autorisé à poser des questions dans le débordement de la pile et à obtenir des idées ou des détails de mise en œuvre de personnes inconnues?
@Vinko Personne ne peut me poursuivre pour ça. :)
@Bitbonk: Oh, mais ils le peuvent. Ils gagnent est une autre affaire :)
Avalondock est bon. p>
http://avalondock.codeplex.com/ p>
C'est une pitié que vous ne pouvez pas l'utiliser;) p>
Je recommanderais vivement pas i> la mise en œuvre de cela vous-même. L'effort impliqué est assez important. Vous vous sauverrez beaucoup de temps - et donc beaucoup d'argent - en achetant un produit de table comme sanddock ( Divelements.com/net/Controls/sanddockwpf/screenshots.aspx ). Devrait également réduire les risques car le composant tiers aura été durci d'utiliser de nombreux clients dans différents scénarios! (Je ne suis pas associé à des divelements et je n'ai pas d'expérience personnelle avec Sanddock - en lui donnant un exemple.)
Combien de manmètres peut-il être, la mise en œuvre vous-même? Cela n'a pas l'air si fort à première vue.
Blimey, vous avez beaucoup plus de confiance que moi * Grin * - Cela semble raisonnable pour moi! Après tout, vous voulez soutenir un "lot de scénarios différents" et "Windows de la boîte à outils Dock de Dock de différentes manières." Cela me semble un projet de plusieurs semaines au minimum; Mais bien sûr, je ne connais pas vos exigences ni vos compétences de votre équipe!
Multiweeks sonne bien pour moi. :)
Avez-vous vérifié Avalondock? C'est gratuit :) CODEPLEX.COM/AVALONDOCK
@IV Grand conseil pour Avalondock! :)
Je comprends la nécessité de faire attention aux licences, mais je devrais être d'accord avec les autres ici. Si c'est une source ouverte et que la licence n'est pas trop restrictive, vous devriez vraiment utiliser quelque chose qui a déjà été écrit et testé plutôt que de perdre votre temps la réécrit. La licence d'Avalondock ne vous oblige pas à ouvrir votre code comme certaines licences. Cela vous permet de faire toutes les modifications souhaitées. La seule chose que vous avez à faire est de fournir l'avis de copyright avec le vôtre lorsque vous expédiez votre produit. Qu'est-ce qui vous empêche de l'utiliser?