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¶
<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.
<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>
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:
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.
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.