2010-06-01 82 views
3

我有一個Window1.xaml主窗口;並在某些事件發生後,我顯示一個UserControl EditFile.xaml。關閉當前UserControl

後面的代碼是:

public static int whichSelected = -1; 
private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    //searchEditPanel.Children.Clear(); 
    whichSelected = listViewFiles.SelectedIndex; 
    searchEditPanel.Children.Add(_EditFileControle);  //this is Grid 
} 

而現在,我怎麼能收從其內容中打開/添加的用戶控件通過點擊取消按鈕或類似的東西?

回答

1

你試過這個嗎?

searchEditPanel.Children.Remove(_EditFileControle); 

另一個建議:

也許這會有所幫助:http://sachabarber.net/?p=162

,如果它不:一個屬性添加到您的用戶控件:

public UserControl ParentControl {get;set;} 

現在修改代碼:

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    //searchEditPanel.Children.Clear(); 
    whichSelected = listViewFiles.SelectedIndex; 
    _EditFileControle.ParentControl = this; 
    searchEditPanel.Children.Add(_EditFileControle);  //this is Grid 
} 

現在,你應該能夠做到這一點:

// Somewhere in your UserControl 
if (this.ParentControl != null) 
    this.ParentControl.Children.Remove(this); 
+1

是的 - 工作,但從父母(窗口1)運行。我必須從我的孩子(EditFile.xaml.cs文件)關閉UserControl通過點擊它一些取消按鈕。 – BlueMan 2010-06-01 11:46:49

1

您可以設置可見性要控制的屬性「關閉」到摺疊

這種方式將不會再顯示,但如果您稍後需要重用它,它仍會存在於可視化樹中。

2

在您的按鈕單擊處理程序嘗試:

Window parentWindow = (Window)this.Parent; 
parentWindow.Close(); 
+0

未將對象引用設置爲對象的實例。 – albatross 2016-01-12 11:52:54

10
Window.GetWindow(this).Close(); 

你並不需要使用一個新的變量,你可以用它直。

+0

只是想知道...這會導致'UserControl.Unloaded'事件引發? – IAbstract 2015-09-10 13:15:15