2010-12-05 8 views
0

J'ai un contrôle utilisateur WPF personnalisé appelé TimeoutPanel que j'essaie d'utiliser. Toutefois, si j'essaie de l'ajouter à ma fenêtre à partir du fichier .cs, il n'apparaît pas réellement.Le contrôle utilisateur personnalisé n'apparaît pas dans la fenêtre WPF?

Je dois être en mesure d'obtenir un handle à la fenêtre qui possède l'écran de délai.

TimeoutPanel tp = new TimeoutPanel(this); 
tp.Visibility = Visibility.Visible; 

J'apprécierais vraiment si quelqu'un pourrait s'il vous plaît signaler ce que je fais mal!

Edit: Voici le constructeur pour mon TimeoutPanel

public TimeoutPanel(Window parent) 
{ 
    this.InitializeComponent(); 
    parentWindow = parent; 
} 

Je demande avec le code suivant dans le fichier .cs pour une fenêtre de l'écran d'accueil:

TimeoutPanel tp = new TimeoutPanel(this); 
MainGrid.Children.Add(tp); 

Il se bloque à l'exception : Informations supplémentaires: Impossible de créer l'objet de type 'TicketBooth.TimeoutPanel'. CreateInstance a échoué, ce qui peut être dû à l'absence de constructeur public par défaut pour 'TicketBooth.TimeoutPanel'. Erreur à l'objet 'System.Windows.Controls.Grid' dans le fichier de marquage 'TicketBooth; component/homescreen.xaml' Ligne 174 Position 10.

Merci!

+0

Ah, désolé je l'ai eu! L'exception était une faute de frappe de ma part ... Il semble fonctionner maintenant! Merci pour toute votre aide! – ksamurai

Répondre

1

Ce que vous faites ne serait en aucune placez ce UserControl sur la fenêtre de votre application WPF. Vous devez placer UserControl sur un enfant dans Window. Définir la visibilité ne place pas réellement le UserControl comme un enfant de n'importe quel conteneur. Je pense qu'une grille est votre conteneur dans la fenêtre. Si c'est le cas; Pour ajouter votre UserControl à la grille, il suffit de l'ajouter en tant qu'enfant dans la grille. Vous aurez besoin de nommer votre grille avant de le référencer dans le code derrière ...

TimeoutPanel tp = new TimeoutPanel(this); 
myGrid.Children.Add(tp); 
0

vous devez ajouter ce contrôle à la collection de contrôle parent.

On suppose que, vous avez un StackPanel appelé stckPanel dans la fenêtre principale, donc si vous voulez montrer créé le contrôle dans ce panneau de pile, vous devez faire le code suivant

TimeoutPanel tp = new TimeoutPanel(this); 
stckPanel.Children.Add(tp); 
+0

Merci pour les commentaires! Cependant, en faisant cela, il se bloque. J'ai remarqué cependant que cela fonctionne si je supprime le paramètre du constructeur (pas vraiment sûr pourquoi il n'aime pas le paramètre). Peut-être la meilleure approche est de simplement appeler une deuxième méthode après l'avoir configurée pour passer mon paramètre comme: TimeoutPanel tp = new TimeoutPanel(); tp.passPartent (this); Ce serait génial si vous pouviez expliquer pourquoi il se bloque avec un paramètre si! Merci! – ksamurai

+0

@Kim Poster l'exception et ce que vous faites avec cette référence dans le ctor –

+0

@Aaron Okay mis à jour mon message original afin que vous puissiez voir. Merci. – ksamurai

Questions connexes