2010-12-05 41 views
0

我有一个自定义的WPF用户控件,我试图使用一个名为TimeoutPanel的控件。但是,如果我尝试从.cs文件将它添加到我的窗口中,它实际上并不显示。自定义用户控件不出现在WPF窗口中?

我需要能够获得拥有超时屏幕的窗口句柄。

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

我真的很感激,如果有人可以请指出我做错了什么!

编辑: 这里是我的TimeoutPanel构造

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

我跟在cs文件下面的代码的主屏幕窗口调用它:

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

它崩溃,出现异常: 附加信息:无法创建'TicketBooth.TimeoutPanel'类型的对象。 CreateInstance失败,这可能是由于没有“TicketBooth.TimeoutPanel”的公共默认构造函数造成的。标记文件'TicketBooth; component/homescreen.xaml'中的对象'System.Windows.Controls.Grid'错误174行10.位置10.

谢谢!

+0

啊,对不起,我明白了!例外是我的一个错字...它现在似乎正在工作!感谢您所有的帮助! – ksamurai 2010-12-05 04:40:59

回答

1

你正在做的会中没有什么UserControl放置在WPF应用程序的Window上。您需要将UserControl放置在Window中的一个子节点上。设置Visiblity并不实际将UserControl作为任何容器的子项。

我的猜测是网格是你的窗口内的容器。如果是这样;要将您的UserControl添加到网格,只需将其添加为网格中的一个子节点即可。您需要在引用它后面的代码之前命名您的网格...

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

您需要将此控件添加到某些父级控件集合中。

假设你有一个在你的主窗口称为stckPanel StackPanel的,所以如果你想显示这个创造了这个堆栈面板控制之下,你需要做下面的代码

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

感谢您的反馈!但是,这样做会导致崩溃。然而,我注意到,如果我从构造函数中删除参数(不确定它为什么不喜欢该参数),它会起作用。也许最好的方法是在设置它之后调用第二种方法来传递我的参数,如: TimeoutPanel tp = new TimeoutPanel(); tp.passPartent(this); 这将是很好,如果你可以解释为什么它崩溃的参数虽然!谢谢! – ksamurai 2010-12-05 04:13:05