J'ai un contrôle utilisateur que je charge dans un MainWindow
lors de l'exécution. Je ne peux pas obtenir un handle sur la fenêtre contenant à partir du UserControl
. J'ai essayé this.Parent
, mais c'est toujours null. Est-ce que quelqu'un sait comment obtenir un handle de la fenêtre contenant à partir d'un contrôle utilisateur dans WPF?Contrôle utilisateur WPF parent
Voici comment le contrôle est chargé:
private void XMLLogViewer_MenuItem_Click(object sender, RoutedEventArgs e)
{
MenuItem application = sender as MenuItem;
string parameter = application.CommandParameter as string;
string controlName = parameter;
if (uxPanel.Children.Count == 0)
{
System.Runtime.Remoting.ObjectHandle instance = Activator.CreateInstance(Assembly.GetExecutingAssembly().FullName, controlName);
UserControl control = instance.Unwrap() as UserControl;
this.LoadControl(control);
}
}
private void LoadControl(UserControl control)
{
if (uxPanel.Children.Count > 0)
{
foreach (UIElement ctrl in uxPanel.Children)
{
if (ctrl.GetType() != control.GetType())
{
this.SetControl(control);
}
}
}
else
{
this.SetControl(control);
}
}
private void SetControl(UserControl control)
{
control.Width = uxPanel.Width;
control.Height = uxPanel.Height;
uxPanel.Children.Add(control);
}
J'ai essayé de passer en utilisant ce code depuis mon contrôle utilisateur. J'ai passé ceci dans cette méthode mais elle a renvoyé la valeur null, indiquant que c'est la fin de l'arbre (selon votre commentaire). Savez-vous pourquoi c'est? Le contrôle utilisateur a un parent qui est le formulaire contenant. Comment puis-je gérer ce formulaire? –
J'ai découvert la raison pour laquelle il retourne null. Je mettais ce code dans le constructeur de mon contrôle utilisateur. Vous devriez exécuter ce code après le chargement du contrôle. PAR EXEMPLE. connecter un événement: this.Loaded + = new RoutedEventHandler (UserControl_Loaded) –
Un autre problème est dans le débogueur. VS va exécuter le code de l'événement Load, mais il ne trouvera pas le parent Window. –