Закрыть текущий UserControl

У меня есть главное окно Window1.xaml; и после некоторого события я отображаю UserControl EditFile.xaml.

Код позади:

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
}

А теперь, как я могу закрыть открытый / добавленный UserControl из его содержимого, нажав кнопку "Отмена" или что-то в этом роде?

5 ответов

Решение

Вы пробовали это?

searchEditPanel.Children.Remove(_EditFileControle);

Другое предложение:

Может быть, это поможет: http://sachabarber.net/?p=162

если это не так: добавьте свойство в свой UserControl:

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);
Window.GetWindow(this).Close();

Вам не нужно использовать новую переменную, вы можете использовать ее напрямую.

В вашем обработчике нажатия кнопки попробуйте:

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

Вы можете установить свойство Visibility элемента управления, который вы хотите "закрыть" для Collapsed.

Таким образом, он больше не будет отображаться, но все равно будет присутствовать в визуальном дереве, если вам понадобится использовать его позже.

private void Button_Click(object sender, RoutedEventArgs e)
{

    (this.Parent as searchEditPanel).Children.Remove(this);

}
Другие вопросы по тегам