2010-12-05 78 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