如何将页面加载到另一个wpf页面开始的窗口中的框架中?

时间:2019-01-29 03:05:38

标签: c# wpf window

我正在wpf和c#中创建一个简单的联系人应用程序。最初,我想要的内容看起来很简单,但是我已经尝试过在某些页面之间进行导航,但是没有用。我可以从窗口切换页面,但是,当我进入其中一个页面并尝试加载另一个页面时,什么也没有发生。

private void BtnEditarContato_Click(object sender, RoutedEventArgs e)
{
            try
            {
                Contato c = new Contato();
                c = (Contato)DgContato.SelectedItem;

                Page_Contato_Fisica p = new Page_Contato_Fisica(true, c);

                ViewContatoFisico v = new ViewContatoFisico();

                v.FrameContatoFisico.Content = p;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
}

我正在从DataGrid的记录中获取数据,正在加载模板类并将该类传递到另一个窗口以加载字段并进行更改,但是我无法进行此导航。

有人知道如何解决吗?

2 个答案:

答案 0 :(得分:0)

您需要执行 .show()之类的操作。

如果 Page_Contato_Fisica 是以下形式:

Page_Contato_Fisica p = new Page_Contato_Fisica(true, c);
p.show();

答案 1 :(得分:0)

当您说“将该类传递到另一个窗口”时。 如果该窗口已经打开,那么您必须去查找对该窗口的引用。 然后,您会发现它的控件是私有成员,因此您不仅可以设置框架的内容。 在所有BTW处都使用一个框架是一个坏主意,但我会在最后进行介绍。 在您的视图中添加一个公共方法,该方法将页面作为参数。 然后,该方法将成为您的ViewContatoFisico的一部分,并且可以对其控件进行更改。

    public void SetContent(Page p)
    {
        this.FrameContatoFisico.Content = p;
    }

然后,您需要拥有ViewContatoFisico才能进行任何操作。 您可以新建一个并显示它:

            Page_Contato_Fisica p = new Page_Contato_Fisica(true, c);
            ViewContatoFisico v = new ViewContatoFisico();
            v.SetContent(p);
            v.Show();

在这种情况下(如果您不小心的话),您的用户最终可能会面临大量此类负载。 我见过一些用户经常“丢失”窗口的应用程序,因为所有内容都会加载另一个窗口。

如果您已经展示了一个实例,或者希望避免出现多窗口问题,那么您可以获取对任何打开的实例的引用。 您可以将typeof(ViewContatoFisico)传递给:

    private Window GetWindowInstance(Type winType)
    {
        Window win;
        win = Application.Current.Windows
               .OfType<Window>()
               .SingleOrDefault(w => w.GetType() == winType);
        if (win == null)
        {
            win = (Window)Activator.CreateInstance(winType);
        }
        return win;
    }

然后,当然。

            v.SetContent(p);
            v.Show();

我的最后一条建议。 不要使用页面和框架。 请改用UserControl和ContentControl。 UserControl与Pages几乎相同,但更加灵活。 ContentControls的重量比框架轻得多,并且更加灵活。 框架的日记本包含对您放入其中的每个内容的引用。

我还建议您先研究MVVM和viewmodel。