10
votes

WPF Popup alternative

J'ai une fenêtre avec une fenêtre contextuelle qui apparaît lorsqu'un élément d'une liste de lecture est double cliquée.
Il est centré sur la fenêtre principale et a l'air vraiment agréable flottant là-bas.
Le problème est que lorsque l'utilisateur déplace la fenêtre principale ou sélectionne un autre programme, et la pop up flotte sur les autres choses.

J'aimerais avoir quelque chose comme une popup, ce qui signifie qu'il flottera sur d'autres éléments de la fenêtre, mais colle avec la fenêtre principale lorsqu'il se déplace (reste centré) et ne flotte pas sur les autres programmes .
Puis-je faire une pop up agir comme ceci ou y a-t-il une meilleure façon de le faire?


3 commentaires

C'est dans vb.net 2010 et ne pensez pas que la popup a la propriété de propriétaire, et si j'essaie de définir la définition window.getwindow (me) .OWNER = Application.Current.mainwindow Je reçois une erreur Dire ne peut pas définir la propriété propriétaire sur elle-même. Je ne suis donc pas sûr de la façon de le faire correctement.


Comme il s'agit du meilleur coup sur Google pour "Popup WPF flotte sur d'autres applications". Si vous souhaitez utiliser une popup pour d'autres raisons, je veux simplement laisser tomber un lien vers Stackoverflow.com/questions/16316139/...


Génial, merci pour la pointe


4 Réponses :


0
votes

Je n'ai pas trouvé de moyen de fabriquer des popups arrêter de faire cela dans WPF

comme alternative, vous pouvez créer un UserControl qui agit comme une popup.

Habituellement, j'hôte la section Contenu de l'application avec la fenêtre contextuelle dans une commande de toile, et lorsque ISPopupopen est modifié en true I, définissez la visibilité de la pop up = visible.


3 commentaires

Cela peut être la voie à suivre, mais je ne suis toujours pas sûr de la meilleure façon de le faire. ListView est dans une page CustomUserControl, à l'intérieur d'une page, à l'intérieur d'un cadre de navigation, à l'intérieur de la fenêtre (qui n'est pas la fenêtre principale, au cas où cela aurait permis de la rendre plus facile)


Je pourrais ajouter une toile à la page, mais je ne sais pas comment bouillir la commande pour l'ouvrir à partir de l'UserControl


@ Andyd273 J'ajouterais la fenêtre contextuelle à votre contrôle supérieur (dans ce cas, fenêtre) et avoir une propriété dans votre viewModel de ispopupopen . Je voudrais ensuite configurer un auditeur d'événements pour écouter showpopudevent s et montrer la fenêtre contextuelle lorsque cet événement est soulevé. Vous pouvez également transmettre du contenu contextuel dans le cadre des paramètres de ShowPopUPEvent.



3
votes

Il est possible qu'un Adorner correspondra à vos besoins dans ce cas mieux qu'un popup. Les ornières peuvent aussi flotter au-dessus de votre fenêtre. Il y a quelques différences, principalement qu'un adorateur est lié à un uielement (qui inclut Windows).


4 commentaires

Savez-vous si un adorateur peut être appliqué à un élément après le fait? J'essaie de faire ce programme assez modulaire, de sorte que la liste de liste qui affiche la fenêtre contextuelle fait partie d'un contrôle utilisateur personnalisé, incorporé dans une page, qui se trouve à l'intérieur d'un cadre de navigation sur la fenêtre. Je voudrais le faire afin que tout ce que je doive faire est de mettre le code Adorner à l'intérieur du contrôle de l'utilisateur et de le dire de se connecter à la fenêtre. Je pourrais l'attacher au contrôle de l'utilisateur, mais j'espère le centrer dans la fenêtre.


Oui, ils peuvent être ajoutés et supprimés sur la mouche comme des popups. Par exemple, j'ai écrit mon propre DataGrid et utilise un adorateur comme fenêtre d'édition pour les cellules. Assurez-vous que votre fenêtre a une adornerlayer (je suggère d'en ajouter un à votre XAML) et vous pouvez facilement centrer l'adorateur.


Des bonnes ressources expliquant le processus? Apparemment, "Adornerlayer" est assez ambigu, sans beaucoup de bons exemples de la meilleure façon de l'utiliser. La plupart des exemples sont «Mettez un point sur le coin d'une zone de texte» et impliquent l'écriture d'une classe pour chacun. Lorsque cela est fait, j'aurai probablement plus d'une douzaine de commandes de style "popup", contenant principalement un contrôle utilisateur personnalisé, et je préférerais ne pas avoir à écrire une classe spécifique pour chacun si je peux l'aider. Les popups sont si faciles à utiliser, de la conception de la conception de XAML et de le montrer au besoin. Un contrôle Adorner avec ce type de création facile serait génial.


J'ajoute d'habitude à l'intérieur de ma fenêtre ou de la grille de niveau supérieur ou de quoi que ce soit pour vous assurer que l'on existe. Dans certains cas, comme lorsque j'ai utilisé une commande dans une boîte de dialogue, pour une raison quelconque, la couche n'est pas là.



4
votes

Les popups ne se déplaceront pas pendant que la fenêtre est redimensionnée ou déplacée. Parce que, les menu contextuels / contextes ne sont pas la partie de l'arbre visuel. Vous devez utiliser Adorner pour cela. Je vais suggérer de lire Ceci série quatre parties pour un démarrage rapide sur Adorner.


1 commentaires

Savez-vous si un adorateur peut être appliqué à un élément après le fait? J'essaie de faire ce programme assez modulaire, de sorte que la liste de liste qui affiche la fenêtre contextuelle fait partie d'un contrôle utilisateur personnalisé, incorporé dans une page, qui se trouve à l'intérieur d'un cadre de navigation sur la fenêtre. Je voudrais le faire afin que tout ce que je doive faire est de mettre le code Adorner à l'intérieur du contrôle de l'utilisateur et de le dire de se connecter à la fenêtre. Je pourrais l'attacher au contrôle de l'utilisateur, mais j'espère le centrer dans la fenêtre.



2
votes

Si vous êtes prêt à utiliser une option tierce partie / open source (MS-PL), le Toolkit WPF étendu < / a> a un Contrôle de l'enfantwindow .

Ce n'est techniquement pas une fenêtre séparée, mais il semble s'agir d'une fenêtre séparée à l'utilisateur.


0 commentaires