2013-10-07 3 views
0

У меня есть другое окно WPF, которое я создал .. say window2.xaml. У меня есть кнопка .. и по щелчку я хочу, чтобы она загрузила это окно. Я пробовал Google, но ничего не работает. Он просто загружает пустую страницу. Я знаю, что это действительно просто, но я действительно не могу найти, как это сделать через мои поиски.Загрузите новое окно WPF с кнопки

Это то, что я пробовал:

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

EDIT: я понял, проблема. Я вынул компонент initialize, потому что есть ошибка. Я думал, что это то, что нужно только в главном окне. Когда я верну его, он работает. Всем спасибо.

+1

Покажите свой GameClock XAML –

+0

Это в основном это. Единственное, что я добавляю, это установить владельца: temp.Owner = this; Отображается ли ваше окно в дизайнере? – Paul

+1

Создает ли конструктор GameClock свой «InitializeComponent»? –

ответ

1

попробовать это ... и можно использовать как общий Methode

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); 
    } 
} 
1

Перед созданием экземпляра GameClock вам может потребоваться прочитать файл XAML. Что-то вроде этого:

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

JAB

Смежные вопросы