自定义用户控件没有出现在WPF窗口中?

时间:2010-12-05 03:56:00

标签: c# wpf user-controls

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

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

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.

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在做的事情绝对不会将UserControl放在WPF应用程序的Window上。您需要将UserControl放在Window中的子项上。设置Visiblity实际上并不将UserControl作为任何容器的子项。

我的猜测是Grid是Window中的容器。如果是这样;要将UserControl添加到网格中,只需将其作为子网格添加到网格中即可。在引用后面的代码中,您需要为Grid命名...

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

答案 1 :(得分:0)

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

假设您在主窗口中有一个名为stckPanel的堆栈面板,因此如果要在此堆栈面板下显示此创建的控件,则需要执行以下代码

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