0

私が作成した別の WPF ウィンドウがあります.window2.xaml と言ってください。私はボタンを持っています..そしてクリックすると、そのウィンドウをロードしたい..グーグルを試しましたが、何も機能していないようです。空白のページをロードするだけです。これが本当に簡単であることは知っていますが、検索でその方法を見つけることができません。

これは私が試したことです:

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

編集:私は問題を理解しました。エラーが発生したため、初期化コンポーネントを取り出しました。メインウィンドウだけに必要なものだと思っていました。戻すと動作します。みんな、ありがとう。

4

2 に答える 2

1

GameClock のインスタンスを作成する前に、XAML ファイルを読み取る必要がある場合があります。このようなもの:

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

ジャブ

于 2013-10-07T19:08:47.797 に答える
1

これを試してみてください...一般的なメソッドのように使用できます

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);
    }
}
于 2013-10-07T19:09:21.907 に答える