2012-06-21 38 views
74

Tôi mới dùng wpf.I có hai cửa sổ như window1 và window2. tôi có một nút trong window1. nếu tôi nhấp vào nút đó, cửa sổ2 phải mở. những gì tôi nên làm cho điều đó. Có mã những gì tôi đã cố gắng.Làm cách nào để mở cửa sổ thứ hai từ cửa sổ đầu tiên trong wpf?

window2.show(); 
+4

Bạn đã thử gì? Đó là điều cơ bản mà bạn có thể tìm thấy bằng cách tìm kiếm trừ khi bạn có vấn đề cụ thể, mà bạn không đề cập đến. – Reniuz

Trả lời

154

Viết mã của bạn trong window1.

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

Tôi có thể viết dòng này trên sự kiện Window_Loaded không? Nếu vậy, sau đó cửa sổ thứ hai không hiển thị. –

+5

Đặt 'this.Close()' trong bất kỳ sự kiện tải cửa sổ nào có lẽ không phải là một ý tưởng hay. – StingyJack

2

Giả sử cửa sổ thứ hai được định nghĩa là public partial class Window2 : Window, bạn có thể làm điều đó bằng cách:

Window2 win2 = new Window2(); 
win2.Show(); 
+0

tôi muốn mở window2 từ window1. –

2

Bạn có thể tạo nút trong Window1 và kích đúp vào nó. Nó sẽ tạo ra Bấm xử lý mới, nơi bên trong bạn có thể viết một cái gì đó như thế này:

var window2 = new Window2(); 
window2.Show(); 
15
private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    window2 win2 = new window2(); 
    win2.Show(); 
} 
25

Bạn sẽ muốn tạo một ứng dụng WPF mới. Khi bạn đã thực hiện xong, bạn nên có tệp .xaml và tệp .cs. Chúng đại diện cho cửa sổ chính của bạn. Tạo tệp .xaml bổ sung và tệp .cs để thể hiện cửa sổ phụ của bạn.

MainWindow.xaml

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Button Content="Open Window" Click="ButtonClicked" Height="25" HorizontalAlignment="Left" Margin="379,264,0,0" Name="button1" VerticalAlignment="Top" Width="100" /> 
    </Grid> 
</Window> 

MainWindow.xaml.cs

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent();    
    } 

    private void ButtonClicked(object sender, RoutedEventArgs e) 
    { 
     SubWindow subWindow = new SubWindow(); 
     subWindow.Show(); 
    } 
} 

Sau đó thêm bất cứ điều gì thêm mã bạn cần các lớp:

SubWindow.xaml SubWindow.xaml.cs

+7

đủ đơn giản! Tôi ghét wpf, nó chỉ vô dụng phức tạp và được thiết kế để phản tác dụng. –

+13

Trừ trường hợp đó là sai. Bạn không cần một ứng dụng hoàn toàn mới. Chỉ là một cửa sổ mới. –

5

Trong WPF, chúng tôi có một vài tùy chọn bằng cách sử dụng phương thức Show() và ShowDialog(). Vâng, nếu bạn muốn đóng cửa sổ mở ra khi cửa sổ mới được mở sau đó bạn có thể sử dụng Show() phương pháp

Window1 win1 = new Window1(); 
win1.Show(); 
win1.Close(); 

ShowDialog() cũng sẽ mở ra một cửa sổ nhưng trong trường hợp này, bạn không thể đóng cửa sổ đã mở trước đó của bạn.

1

bạn có thể sử dụng mã này, hy vọng sẽ giúp bạn

private void OnClickNavigate(object sender, RoutedEventArgs e) 
    { 
     NavigatedWindow navigatesWindow = new NavigatedWindow(); 
     navigatesWindow.ShowDialog(); 

    } 

Cảm ơn :)

2

Bạn sẽ cần phải tạo một thể hiện của một cửa sổ mới như vậy.

var window2 = new Window2(); 

Một khi bạn có các ví dụ bạn có thể sử dụng Show() hoặc ShowDialog() phương pháp tùy thuộc vào những gì bạn muốn làm.

window2.Show(); 

hoặc

var result = window2.ShowDialog(); 

ShowDialog() sẽ trả về một Nullable<bool> nếu bạn cần điều đó.

4

Điều này đã giúp tôi: Phương thức chủ sở hữu về cơ bản liên kết cửa sổ với cửa sổ khác trong trường hợp bạn muốn cửa sổ phụ có cùng cửa sổ.

LoadingScreen lc = new LoadingScreen(); 
lc.Owner = this; 
lc.Show(); 

Cân nhắc điều này là tốt.

this.WindowState = WindowState.Normal; 
this.Activate(); 
Các vấn đề liên quan