Obtenir la fenêtre WPF par hWnd
Je suis à la recherche pour obtenir une fenêtre WPF et traverser les contrôles. Je suis en mesure d'obtenir le hWnd et j'ai trouvé d'autres posts sur le traversant les contrôles à l'aide d'un DependencyObject. Comment puis-je obtenir un DependencyObject à partir d'un hWnd? Est-il même possible?
source d'informationauteur Dustin Davis
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, WPF remplace complètement WinApi modèle avec tout ce que Hwnd. La fenêtre principale a HWND, bien sûr, parce que les serveurs informatiques en tant que contenant entre WinApi et WPF. Vous pouvez accéder à HWND à l'aide de WindowInteropHelper Classecomme cette. Mais vous ne serez pas en mesure de traverser contrôles de la même manière que vous le feriez avec des natifs ou WinForms app. Vérifier VisualTreeHelper pour traverser le contrôle des arbres dans WPF.
Après que vous obtenez la fenêtre elle-même (comme Marat points comment le faire), vous devez rechercher le visuel de l'arbre. Voici deux fonctions d'aide
trouver tous les enfants d'un type
https://sites.google.com/site/bobstechwiki/home/wpf-ji-shu-1/find-element-by-visual-tree
pour trouver le nom d'un enfant:
Comment puis-je trouver des contrôles WPF par nom ou par type?
Il existe un cas particulier de ne pas documentée ici encore. Il se pourrait que le niveau supérieur de contrôle n'est pas une norme WPF
Window
. C'est le cas (par exemple) dans Visual Studio 2010. J'ai découvert cela lors de l'écriture d'un visual studio Add-in: j'ai voulu faire quelques contrôles WPF dans l'arborescence visuelle, mais vous devez le début de la WPF arbre.Heureusement, il existe une solution:
Le truc, c'est qu'en déclarant la
customWindow
commedynamic
vous n'avez pas besoin de savoir ou de préciser son type. En bon WPF de la mode, il a unContent
de la propriété qui contient tous les éléments de la fenêtre de contenu et tout est normal, à partir de là.