WPF'de ilk pencereden ikinci bir pencereyi nasıl açarım?


125

WPF'de yeniyim. Window1 ve window2 gibi iki pencerem var. Window1'de bir düğmem var. Bu düğmeye tıklarsam, window2'nin açılması gerekir. Bunun için ne yapmalıyım?

İşte denediğim kod:

window2.show();

Yanıtlar:


237

Kodunuzu yazın window1.

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

Bu satırı Window_Loaded olayına yazabilir miyim? Öyleyse, ikinci pencere görüntülenmiyor.
Manish Dubey

37

Yeni bir WPF uygulaması oluşturduğunuzda, bir .xaml dosyasına ve bir .cs dosyasına sahip olmanız gerekir. Bunlar ana pencerenizi temsil eder. Alt pencerenizi temsil edecek ek bir .xaml dosyası ve .cs dosyası oluşturun.

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

Ardından bu sınıflara ihtiyacınız olan ek koda ekleyin:

SubWindow.xaml
SubWindow.xaml.cs

15
yeterince basit! Wpf'den nefret ediyorum, bu çok işe yaramaz bir şekilde karmaşık ve karşı sezgisel olacak şekilde tasarlandı.
Ren

17
private void button1_Click(object sender, RoutedEventArgs e)
{
    window2 win2 = new window2();
    win2.Show();
}

5

İkinci pencerenin şu şekilde tanımlandığını varsayarsak public partial class Window2 : Window, bunu şu şekilde yapabilirsiniz:

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

window1'den window2'yi açmak istiyorum.
ASHOK A

5

Bu bana yardımcı oldu: Sahip yöntemi, aynı pencerelerle fazladan pencere istemeniz durumunda, temelde pencereyi başka bir pencereye bağlar.

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

Bunu da düşünün.

this.WindowState = WindowState.Normal;
this.Activate();

5

WPF'de Show () ve ShowDialog () yöntemlerini kullanarak birkaç seçeneğimiz var.

Peki, yeni bir pencere açıldığında açılan pencereyi kapatmak istiyorsanız, Show () yöntemini kullanabilirsiniz:

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

ShowDialog () ayrıca bir pencere açar, ancak bu durumda daha önce açtığınız pencereyi kapatamazsınız.


2

Bunun gibi yeni bir pencere örneği oluşturmanız gerekecek.

var window2 = new Window2();

Eğer örneğini sahip olduktan sonra kullanabilirsiniz göster () veya ShowDialog () Yapmak istediğiniz şeye bağlı olarak yöntem.

window2.Show();

veya

var result = window2.ShowDialog();

ShowDialog (), buna Nullable<bool>ihtiyacınız olursa bir döndürür .


2

Window1'de bir buton oluşturabilir ve üzerine çift tıklayabilirsiniz. İçine şöyle bir şey yazabileceğiniz yeni bir tıklama işleyici oluşturacaktır:

var window2 = new Window2();
window2.Show();

2

Bu kodu kullanabilirsiniz:

private void OnClickNavigate(object sender, RoutedEventArgs e)
{
    NavigatedWindow navigatesWindow = new NavigatedWindow();
    navigatesWindow.ShowDialog();
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.