Kihagyás

Ablakok

A JavaFX Stage WPF-ben egy Window objektumnak felel meg. Az alkalmazás főablakát az App.xaml StartupUri értéke jelölheti ki; további ablakokat C#-ból hozhatunk létre. Python Tkinterben a főablak Tk, egy újabb ablak Toplevel.

Ablak tulajdonságai

MainWindow.xaml
<Window x:Class="HelloWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Főablak" Width="400" Height="300"
        WindowStartupLocation="CenterScreen"
        ResizeMode="CanResize">
    <Grid />
</Window>
Feladat WPF JavaFX
Cím Title setTitle()
Méret Width, Height setWidth(), setHeight()
Pozíció Left, Top setX(), setY()
Megjelenítés Show() show()
Bezárás Close() close()

Az ikon a Window.Icon tulajdonságban adható meg, ha a képfájl a projekt része és megfelelő erőforrásként van beállítva. A WindowStyle="None" címsor nélküli ablakot ad; ilyenkor nekünk kell biztosítani a mozgatás és bezárás használható módját.

Második ablak megnyitása

Hozzunk létre egy új Window (WPF) elemet ReszletekAblak.xaml néven. A Visual Studio a hozzá tartozó .xaml.cs fájlt is elkészíti.

ReszletekAblak.xaml
<Window x:Class="HelloWpf.ReszletekAblak"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Részletek" Width="300" Height="180">
    <Grid>
        <TextBlock Text="Második ablak"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center" />
    </Grid>
</Window>
ReszletekAblak.xaml.cs
using System.Windows;

namespace HelloWpf;

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

A főablak egy gombjának eseménykezelőjében:

private void DetailsButton_Click(object sender, RoutedEventArgs e)
{
    ReszletekAblak ablak = new() { Owner = this };
    ablak.Show(); // a főablak közben használható marad
}

Modális ablaknál ShowDialog()-ot használunk: a felhasználó előbb ezt az ablakot zárja be, csak utána térhet vissza a főablakhoz. Az Owner tulajdonság összekapcsolja a két ablakot.

Megerősítés kilépés előtt

A JavaFX Alert megfelelője egyszerű kérdéshez a WPF MessageBox. A főablak XAML-fájljában a Closing eseményt az ablak nyitó eleméhez adjuk:

<Window ... Closing="Window_Closing">

A három pont itt a korábbi példából ismert x:Class, xmlns, xmlns:x és többi attribútum rövidítése; a teljes XAML fájlban ezek maradjanak meg.

MainWindow.xaml.cs
using System.ComponentModel;
using System.Windows;

private void Window_Closing(object? sender, CancelEventArgs e)
{
    MessageBoxResult valasz = MessageBox.Show(
        "Valóban ki szeretnél lépni?",
        "Kilépés",
        MessageBoxButton.YesNo,
        MessageBoxImage.Question);

    if (valasz != MessageBoxResult.Yes)
    {
        e.Cancel = true;
    }
}

Az eseménykezelő metódus a MainWindow osztályon belül legyen. Az e.Cancel = true megszakítja a bezárást; külön Close() hívás nem kell. Ha egy Bezárás gombot is készítünk, annak Click eseménykezelőjében egyszerűen Close() hívható, így ugyanaz a megerősítés jelenik meg.