2013-10-21 108 views

回答

5

你說Win1是 「這是一個用戶控件形式。」 (重點是我的)。

如果Win1實際上是UserControl類型,則問題是類型UserControl未定義Show()方法。所以它不能作爲一個窗口「打開」。

爲了解決這個問題,你需要打開一個窗口,並有UC的內容該窗口:

private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    Win1 OP= new Win1(); 
    var host = new Window(); 
    host.Content = OP; 
    host.Show(); 
} 

作爲一個側面說明,您可以使用UserControl作爲App.xaml中StartupUri,它會工作因爲框架認識到它不是一個窗口併爲它創建一個窗口。

+0

+1,有幫助的帖子! :) –

2

打開一個窗口並關閉第一個:

private void Button_Click(object sender, RoutedEventArgs e) 
    {    
     window2 win2= new window2(); 
     win2.Show(); 
     this.Close(); 
    } 
0

你不能直接顯示usercontrol,你應該在另一個窗口中渲染你的usercontrol。

like。

private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    UserControl1 uc1 = new UserControl1(); 

    var win = new MainWindow(); 

    win.Content = win1; 

    win.Show(); 
} 
1

無法將UserControl作爲窗口或對話框打開。最好通過後面的代碼或XAML將usercontrol添加到某個Window中,然後打開該窗口。 不要忘記設置該窗口的DataContext。記住父控制/窗口的datacontext將由child controls/usercontrols繼承。

0

如果您想要做它像一個彈出:

private void btn1_click(object sender, RoutedEventArgs e) 
{ 
    newWin win2 = new newWin(); 
    win2.Show(): 
} 
1

所有這些答案都很好,但是他們沒有采取WPF's Navigation功能。如果您將要隱藏/關閉當前窗口,那麼這是對舊窗口管理的一個很好的選擇。而不是創建多個窗口,創建網頁和簡單地使用在主窗口的單一框架控件顯示它們:

<Grid> 
    <Frame Source="/Menu.xaml" NavigationUIVisibility="Hidden"/> 
</Grid> 

然後,當你想顯示另一個「窗口」(實際上是一個頁面),您可以使用NavigationService改變框架源。從後面的菜單頁面代碼:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    NavigationService.Navigate(new Uri("/Contact.xaml", UriKind.Relative)); 
} 

這將顯示聯繫頁面。使用此方法可確保窗口屬性標準化。一個窗口來統治他們!

+1

謝謝穆爾梅爾!我用一些例子更新了回覆。 – Iridium237

相關問題