Imaginez la situation que vous ouvrez un document WPF Maintenant, si vous vous déplacez avec votre souris à l'extérieur de la fenêtre code> surface code> surface et faites défiler, que se passe-t-il?
Vous faites défiler de haut en bas, mais avec le La question est de savoir comment détecter de l'intérieur du contrôle, que certains autres contrôles parent inconnus dans Visualtree ont commencé à faire défiler?
et définir consécutivement PopUp CODE> (E.G. Par ButtonClick em>).
Vous avez une liste
listbox > directement dans le document popup code> avec des éléments, vous devez donc être capable de faire défiler.
Imaginez que ceci est votre
contrôle personnalisé code> et il est situé dans le
ScrollViewer code>. P>
popup code> ouvert! Et c'est le problème. P>
isdropdownopen = false code>? p>
3 Réponses :
Je ne contestez pas comment vos commandes sont, mais ne pouvez-vous pas baser votre ouverture / fermeture d'un contrôle sur l'événement de mise au point? Et si cela perd la mise au point, fermer la popup? Peut-être que je comprends mal, pouvez-vous poster un extrait de code? Daniel p>
Nous pouvons écrire une gâchette à utiliser avec des éléments contenus dans un Nous avons un bouton qui ouvre un Voici le ScrollViewer code>. Voici un exemple complet Application:
popup code> et tout défilement dans n'importe quel parent
ScrollViewer code> provoque le ScrollTrigger CODE> Actions à tirer et ensuite nous pouvons fermer la popup. Notez que la gâchette est attachée à la touche code> code> et non de la popup
code>. Nous pouvons utiliser n'importe quel élément à proximité dans l'arbre visuel. Notez également que nous utilisons un autre déclencheur pour ouvrir le
popup code> mais comment il s'ouvre n'est pas important pour la question initiale. P>
ScrollTrigger code>:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
AVERTISSEMENT: Il s'agit d'un long commentaire, et il est essentiellement expliquer mes modifications à @ Rick Sladkey '' s réponse. Ce fut un excellent point de départ, mais j'ai remarqué quelques changements que j'ai faits avec certaines choses que j'ai constatés sur des choses qui me passivais.
En faisant mes contrôles personnalisés, je voulais quelque chose de similaire à ceci (je voulais fermer une popup sur un rouleau de défilement ), et a trouvé la réponse à être quelque chose de très similaire à celle de la réponse de Rick Sladkey avec quelques modifications mineures pour aider à améliorer certains articles. P>
Les modifications que j'ai faites étaient principalement en ce qui concerne 3 éléments. Le premier étant que je voyais que le avec cela, ma version modifiée du Le premier changement ici est que j'ai ajouté la logique dans Avec ces changements d'esprit et le fait que je souhaite pouvoir permettre aux consommateurs de mon contrôle de dicter la manière dont la popup est affichée, mon .xaml a regardé quelque chose comme: p> Maintenant, j'avais besoin de quelque chose à lier à, et parce que je crée un contrôle personnalisé, j'ai créé des propriétés de dépendance et d'autres éléments du code-derrière. Si vous utilisez cette approche avec MVVM, vous souhaitez écrire ' Note latérale, j'utilise également prisme, J'utilise donc et avec cela, je suis capable d'avoir une pop up qui fermera sur n'importe quel déclencheur de défilement qui a réellement un changement, ne dispose pas d'appels non requis et permettra également à un utilisateur de modifier s'il est ouvert ou non. P> Si vous l'avez fait aussi loin, merci. J'apprécie votre dévouement et j'espère que cela aide un peu. P> p> ScrollViewer_scrollCollchanged code> a été tiré lorsque je ne faisais pas défiler activement (d'autres les autres le fixent apparemment). Ensuite, lorsque je déchargeais mes commandes,
ScrollViewer_scrollchanged code> n'a pas été détaché à partir du
ScrollViewer code> s, donc si j'ai ajouté 3 puis supprimé 1 et défilé, il tirait toujours le feu 3 fois au lieu de 2. Enfin, je voulais pouvoir ajouter la fonctionnalité de permettre au consommateur de mon contrôle de définir la propriété isopen de manière dynamique. P>
ScrollTrigger code> La classe ressemble à quelque chose comme: p>
ScrollViewer_scrollchanged code> pour voir si les valeurs de décalage effectivement changé ou non. J'ai ajouté une propriété de dépendance sur la gâchette pour vous permettre de contourner cette logique si vous le souhaitez. Le deuxième changement que j'ai ajouté un événement non chargé à l'objet associé, de sorte que si le contrôle a été supprimé, il supprimerait les actions connexes dans le
ScrollViewers code>, réduisant la quantité de fois que le
ScrollViewer_scrollchanged < / Code> L'appel a été effectué lors de l'ajout et de la suppression de mes commandes de manière dynamique. P>
inotifyProperty CODE> et assurez-vous que vos liaisons sont des éléments (pourraient ne pas avoir besoin des parties d'élémentsName de la liaison en fonction de la façon dont vous le faites). Il existe de nombreuses façons de faire cela, et si vous ne le savez pas, il suffit de Google "Données MVVM inotifypropertychangned" et vous le trouverez facilement. P>
déléguecommand code> s, mais vous pouvez utiliser n'importe quelle implémentation de
iCommand code> souhaité. Avec cela, mon code-derrière ressemblait à quelque chose comme: p>
J'ai la même question et la même question. Je fais défiler ma grille et ma popup avec des opérations personnalisées restez au même endroit! J'ai besoin de faire défiler la popup avec la grille!