使用.Child添加UserControl后返回MainWindow

时间:2016-03-22 18:25:30

标签: c# wpf user-controls

MainWindow.xaml.cs中我使用.Child切换到userControl,如下所示:

Grid1.Visibility = Visibility.Hidden;
Stage.Child = new UserControlName();

其中Grid1是内容位于主窗口中的网格(应该隐藏,因为有一些内容会从用户控件后面查看),而Stageborder 1}}我希望UserControl填充的元素

 <Grid >
    <Border x:Name="Stage" Grid.RowSpan="4" Grid.ColumnSpan="2"/>
    <Grid x:Name="Grid1" FocusManager.FocusedElement="{Binding ElementName=textBox}" Margin="10,10,10,10" Width="1200" Height="649" >

UserControlName如何关闭或隐藏xaml.cs个文件,并将视图返回主窗口,同时将MainWindow的{​​{1}}返回{{} 1}}?

2 个答案:

答案 0 :(得分:1)

我会使用PRISM中的区域(https://msdn.microsoft.com/en-us/library/ff921098(v=pandp.40).aspx)来实现。但是如果您创建了简单的应用程序并且您不想花时间学习PRISM,您可以通过添加MainWindow类型的参数来扩展UserControlName类的构造函数,并在此对象上调用一些将视图更改为您的愿望状态的方法。 uglly代码示例:

主窗口:

        private void Button_Click(object sender, RoutedEventArgs e)
    {
        grid1.Visibility = Visibility.Hidden;
        br.Child = new UserControl2(this);
    }

    public void CloseView()
    {
        grid1.Visibility = Visibility.Visible;
        br.Child = null;
    }

用户控件:

    private MainWindow window;
    public UserControl2(MainWindow window)
    {
        this.window = window;
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        window.CloseView();
    }

答案 1 :(得分:1)

另一种选择是使用(例如)Mvvm Light工具包和消息传递(https://msdn.microsoft.com/en-us/magazine/jj694937.aspx)。

子视图会发送消息以关闭,主窗口将收到此消息并隐藏网格。

优点是主窗口和子控件仍然是解耦的,这意味着孩子不需要了解主窗口的任何信息。

抓住这个机会,投入一些时间在Mvvm模式和Mvvm light等图书馆。