WPF: Comment puis-je configurer la Fenêtre du Propriétaire d'une boîte de Dialogue affichée par un UserControl?
J'ai une application WPF avec ces trois types de choses...
- WindowMain
- UserControlZack
- WindowModal
UserControlZack1 se trouve sur mon WindowMain...
<Window x:Class="WindowMain"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProjectName"
...
Name="WindowMain">
<Grid>
...
<local:UserControlZack x:Name="UserControlZack1" ... />
...
</Grid>
</Window>
UserControlZack1 affiche un WindowModal dailog boîte...
Partielle Public Class UserControlZack ... Private Sub SomeButton_Click(...) 'instancier la boîte de dialogue ouvrir modal... Dim boîte WindowModal = New WindowModal() la boîte.Propriétaire = ????? la boîte.ShowDialog() "traiter les données saisies par l'utilisateur si la boîte de dialogue est accepté... Si (boîte.DialogResult.GetValueOrDefault = True), Alors _SomeVar = box.SomeVar ... Fin De Si End Sub Fin De La Classe
Comment puis-je configurer la boîte.Propriétaire à la bonne Fenêtre, mon instance en cours d'exécution de WindowMain?
Je ne peux pas utiliser box.Owner = Me.Owner
, parce que "le" Propriétaire " n'est pas un membre de 'Nom_projet.UserControlZack'."
Je ne peux pas utiliser box.Owner = Me.Parent
, parce que renvoie une Grille, pas de la Fenêtre.
Je ne peux pas utiliser box.Owner = WindowMain
, parce que "'WindowMain' est un type et ne peut pas être utilisé comme une expression."
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser
using
refference sur l'ambiguïté d'un nom d'objet.Pour obtenir le niveau supérieur de la fenêtre de votre contrôle, à supposer qu'il y en est un:
Pour obtenir la fenêtre principale:
VMWare Fusion
sur unMacintosh
- fenêtre apparue pour une seconde, puis disparu.Owner
pour elle aussi! sinon, vous allez obtenir quelques comportements bizarres - votre fenêtre principale de ne pas obtenir deOnActivated
événement / va rester dans le fond, va soudainement disparaître, etc.Mise à jour pour aider et essayer de Greg à partir des commentaires. La commande fonctionne dans le menu principal de windows, le bouton dans le contrôle de l'utilisateur et le menu contextuel dans le contrôle de l'utilisateur.
Je le ferais avec les commandes. Donc, avoir une classe de Commandes.cs quelque chose comme:
Inscrire ces derniers dans votre fenêtre principale: (vous n'avez pas besoin de la canshow la valeur par défaut est true)
C'est mon xaml de la fenêtre principale:
C'est le xaml pour mon contrôle de l'utilisateur (le code par défaut derrière uniquement)
Vous pourriez prendre un peu plus loin et traiter la commande dans une classe de contrôleur de la place et de le rendre un peu plus MVC.
Je l'ai eu à travailler par l'analyse de tout le chemin du retour à travers mon XAML...
Mais cela semble assez peu élégante. Est-il un meilleur moyen?
Ce sujet de changer le nom de la fenêtre pour WindowMain1 ou quelque chose, et le réglage de la propriétaire?