Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从按钮加载新的WPF窗口_C#_Wpf - Fatal编程技术网

C# 从按钮加载新的WPF窗口

C# 从按钮加载新的WPF窗口,c#,wpf,C#,Wpf,我已经创建了另一个WPF窗口。。比如window2.xaml。我有一个钮扣。。然后单击我希望它加载该窗口。。我尝试过谷歌搜索,但似乎没有任何效果。它只加载一个空白页。我知道这很简单,但我真的无法通过搜索找到如何做到这一点 这就是我尝试过的: GameClock temp = new GameClock(); temp.ShowDialog(); //just shows blank window temp.Show(); //just shows a blank window too 编辑

我已经创建了另一个WPF窗口。。比如window2.xaml。我有一个钮扣。。然后单击我希望它加载该窗口。。我尝试过谷歌搜索,但似乎没有任何效果。它只加载一个空白页。我知道这很简单,但我真的无法通过搜索找到如何做到这一点

这就是我尝试过的:

GameClock temp = new GameClock();
temp.ShowDialog();  //just shows blank window
temp.Show();  //just shows a blank window too

编辑:我解决了这个问题。我取出了初始化组件,因为有一个错误。我以为这只是主窗口需要的东西。当我把它放回去的时候,它工作了。谢谢大家。

在创建GameClock实例之前,您可能需要阅读XAML文件。大概是这样的:

GameClock clock;
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
clock = (GameClock)XamlReader.Load(fs);

猛击

试试这个。。。你可以像一般方法一样使用

private void button_ItemClick(object sender, ItemClickEventArgs e)
{
    try
    {
        OpenWin("window2", new Uri(@"window2.xaml", UriKind.Relative), "Window2Label");
    }
    catch (Exception ex)
    {
        Message.Show(ex);
    }
}

public static DocumentPanel OpenWin(string namePainelItem, Uri xamlPath, string caption = "", RoutedEventHandler unloadEvent = null, bool closeOpenWin = false)
{
    try
    {        
        if (closeOpenWin)
        {
            CloseWin(namePainelItem, false);
        }

        DocumentPanel panel1 = GetWin(namePainelItem);
        if (panel1 == null)
        {
            panel1 = new DocumentPanel();
            panel1.Caption = caption;
            panel1.Name = namePainelItem;
            panel1.Content = xamlPath;

            if (unloadEvent != null)
            {
                panel1.Unloaded += unloadEvent;                        
            }            

            hdl.dockLayoutManager.DockController.Insert(hdl.documentGroup1, panel1, 1);
            hdl.dockLayoutManager.DockController.ActiveItem = panel1;
        }
        else
        {
            if (panel1.Visibility != Visibility.Visible)
                panel1.Visibility = Visibility.Visible;

            if(panel1.IsClosed)
                panel1.Closed = false;                    

            hdl.dockLayoutManager.DockController.ActiveItem = panel1;
        }
        return panel1;
    }
    catch (Exception ex)
    {
        Message.Show(ex);                
    }
    return new DocumentPanel();
}


public static void CloseWin(string namePainelItem)
{
    try
    {
        BaseLayoutItem item = hdl.dockLayoutManager.GetItem(namePainelItem);

        if (item != null)
        {
            hdl.documentGroup1.Items.Remove(item);
            hdl.dockLayoutManager.DockController.RemovePanel((DocumentPanel)item);
            item = null;
        }
    }
    catch (Exception ex)
    {
        Message.Show(ex);
    }
}

展示你的游戏时钟——基本上就是这样。我添加的唯一额外内容是设置所有者:temp.owner=this;你的窗口是否在设计器中显示?GameClock构造函数是否完成了它的“InitializeComponent”?啊,我搞砸了。。。我取出了initializecomponent()因为它出错了。。把它放回去,它就起作用了。谢谢