Okna .NET MAUI
Třída .NET Multi-Platform App UI (.NET MAUI) Window poskytuje možnost vytvářet, konfigurovat, zobrazovat a spravovat více oken.
Window definuje následující vlastnosti:
- FlowDirection, typu
FlowDirection
, definuje směr, ve kterém je prvek uživatelského rozhraní okna rozložen. - Height, typu
double
, určuje výšku okna ve Windows. - MaximumHeight, typu
double
představuje maximální výšku okna na stolních platformách. Platné hodnoty jsou mezi 0 adouble.PositiveInfinity
. - MaximumWidth, typu
double
představuje maximální šířku okna na stolních platformách. Platné hodnoty jsou mezi 0 adouble.PositiveInfinity
. - MinimumHeight, typu
double
, představuje minimální výšku okna na stolních platformách. Platné hodnoty jsou mezi 0 adouble.PositiveInfinity
. - MinimumWidth, typu
double
, představuje minimální šířku okna na stolních platformách. Platné hodnoty jsou mezi 0 adouble.PositiveInfinity
. - Overlays, typu
IReadOnlyCollection<IWindowOverlay>
, představuje kolekci překryvných oken. - Page, typu Page, označuje stránku, která se zobrazí v okně. Tato vlastnost je vlastnost Window obsahu třídy, a proto není nutné explicitně nastavit.
- Title, typu
string
, představuje název okna. - Width, typu
double
, určuje šířku okna ve Windows. - X, typu
double
, určuje souřadnici X okna ve Windows. - Y, typu
double
, určuje souřadnici Y okna ve Windows.
Tyto vlastnosti, s výjimkou Overlays
vlastnosti, jsou podporovány BindableProperty objekty, což znamená, že mohou být cílem datových vazeb a styl.
Třída Window definuje následující události:
- Created, který je vyvolán při vytvoření okna.
- Resumed, který je vyvolán při obnovení okna ze stavu spánku.
- Activated, který je vyvolán při aktivaci okna.
- Deactivated, který je vyvolán při deaktivaci okna.
- Stopped, který je vyvolán při zastavení okna.
- Destroying, který je vyvolán při zničení okna.
- SizeChanged, který je vyvolán na desktopových platformách při změně velikosti okna.
- Backgrounding, s doprovodným
BackgroundingEventArgs
objektem, který je vyvolán v systému iOS a Mac Catalyst při zavření okna nebo vstup do stavu pozadí. Tuto událost lze použít k zachování libovolnéhostring
stavuState
vlastnosti objektuBackgroundingEventArgs
, který operační systém zachová, dokud nebude čas obnovit okno. Když je okno obnoveno stav je poskytován prostřednictvímIActivationState
argumentu metodyCreateWindow
. - DisplayDensityChanged, s doprovodným
DisplayDensityChangedEventArgs
objektem, který je vyvolán v Androidu a Windows, když se změnily efektivní tečky na palec (DPI) okna.
Další informace o událostech životního cyklu a jejich přidružených přepsání najdete v tématu Životní cyklus aplikace.
Třída Window také definuje následující modální navigační události:
- ModalPopped, s
ModalPoppedEventArgs
, který je vyvolán v případě, že zobrazení bylo upraveno modálně. - ModalPopping, s
ModalPoppingEventArgs
, který je vyvolán, když je zobrazení modálně přepnuto. - ModalPushed, s
ModalPushedEventArgs
, který je vyvolán po zobrazení modálně. - ModalPushing, s
ModalPushingEventArgs
, který je vyvolán při modálně nasdílení zobrazení. - PopCanceled, který je vyvolán při modální pop je zrušen.
Třída VisualElement má Window
vlastnost, která zveřejňuje nadřazený Window objekt. K této vlastnosti lze přistupovat z libovolné stránky, rozložení nebo zobrazení pro manipulaci s Window objekty.
Vytvoření okna
Ve výchozím nastavení vytvoří .NET MAUI Window objekt při nastavení MainPage
vlastnosti na Page objekt ve třídě App
. Můžete však také přepsat metodu CreateWindow
ve třídě App
a vytvořit Window objekt:
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override Window CreateWindow(IActivationState activationState)
{
Window window = base.CreateWindow(activationState);
// Manipulate Window object
return window;
}
}
}
Window Zatímco třída má výchozí konstruktor a konstruktor, který přijímá Page argument, který představuje kořenovou stránku aplikace, můžete také volat základní CreateWindow
metodu pro vrácení vytvořeného Window objektu .NET MAUI.
Ve výchozím nastavení aplikace .NET MAUI přepíše metodu CreateWindow
Window ve vaší App
třídě a vytvoří objekt:
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState? activationState)
{
return new Window(new AppShell());
}
}
}
Třída Window má výchozí konstruktor a konstruktor, který přijímá Page argument, který představuje kořenovou stránku aplikace.
Kromě toho můžete také vytvořit vlastní Window-odvozený objekt:
namespace MyMauiApp
{
public class MyWindow : Window
{
public MyWindow() : base()
{
}
public MyWindow(Page page) : base(page)
{
}
// Override Window methods
}
}
Window-odvozenou třídu pak lze využívat vytvořením MyWindow
objektu v přepsání CreateWindow
ve vaší App
třídě.
Bez ohledu na to, jak se objekt Window vytvoří, bude nadřazenou stránkou v aplikaci.
Podpora více oken
V Androidu, iOSu (iPadOS), Mac Catalyst a Windows lze současně otevřít více oken. Toho lze dosáhnout vytvořením objektu Window a jeho otevřením pomocí OpenWindow
metody na objektu Application
:
Window secondWindow = new Window(new MyPage());
Application.Current?.OpenWindow(secondWindow);
Kolekce Application.Current.Windows
typu IReadOnlyList<Window>
udržuje odkazy na všechny Window objekty, které jsou registrovány s objektem Application
.
Konkrétní okno lze přenést na přední straně systému Mac Catalyst a Windows metodou Application.Current.ActivateWindow
:
Application.Current?.ActivateWindow(secondWindow);
Systém Windows lze zavřít metodou Application.Current.CloseWindow
:
// Close a specific window
Application.Current?.CloseWindow(secondWindow);
// Close the active window
Application.Current?.CloseWindow(GetParentWindow());
Důležité
Podpora více oken funguje ve Windows bez další konfigurace. Na Androidu, iPadOS a Mac Catalyst se ale vyžaduje další konfigurace.
Konfigurace Androidu
Pokud chcete používat podporu více oken v Androidu, musíte změnit MainActivity
režim spuštění v platformách Android > > MainActivity.cs z LaunchMode.SingleTop
:LaunchMode.Multiple
using Android.App;
using Android.Content.PM;
using Android.OS;
namespace MyMauiApp;
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.Multiple, ...)]
public class MainActivity : MauiAppCompatActivity
{
}
Konfigurace iPadOS a macOS
Pokud chcete používat podporu více oken v systémech iPadOS a Mac Catalyst, přidejte třídu pojmenovanou SceneDelegate
do složek Platforms > iOS a Platforms > MacCatalyst :
using Foundation;
using Microsoft.Maui;
using UIKit;
namespace MyMauiApp;
[Register("SceneDelegate")]
public class SceneDelegate : MauiUISceneDelegate
{
}
Potom v editoru XML otevřete soubor Platforms > iOS > Info.plist a soubor Platforms > MacCatalyst > Info.plist a na konec každého souboru přidejte následující XML:
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<true/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>__MAUI_DEFAULT_SCENE_CONFIGURATION__</string>
<key>UISceneDelegateClassName</key>
<string>SceneDelegate</string>
</dict>
</array>
</dict>
</dict>
Důležité
Podpora více oken nefunguje v iOSu pro iPhone.
Umístění a velikost okna
Umístění a velikost okna lze programově definovat pro aplikaci .NET MAUI ve Windows nastavením X
, Y
, Width
a Height
vlastností objektu Window .
Upozorňující
Mac Catalyst nepodporuje změnu velikosti nebo přemístění oken programově nastavením X
, Y
, Width
a Height
vlastnosti.
Pokud chcete například nastavit umístění a velikost okna při spuštění, měli byste přepsat metodu CreateWindow
ve třídě App
a nastavit X
, Y
, Width
a Height
vlastnosti objektu Window :
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState activationState) =>
new Window(new AppShell())
{
Width = 700,
Height = 500,
X = 100,
Y = 100
};
}
Případně můžete okno umístit a změnit jeho velikost tak, že se k vlastnosti dostanete Window
z libovolné stránky, rozložení nebo zobrazení. Například následující kód ukazuje, jak umístit okno do středu obrazovky:
// Get display size
var displayInfo = DeviceDisplay.Current.MainDisplayInfo;
// Center the window
Window.X = (displayInfo.Width / displayInfo.Density - Window.Width) / 2;
Window.Y = (displayInfo.Height / displayInfo.Density - Window.Height) / 2;
Informace o získání metrik obrazovky zařízení najdete v tématu Informace o zobrazení zařízení.
Mac Catalyst
Mac Catalyst nepodporuje změnu velikosti ani přemístění oken programově. Alternativním řešením pro povolení změny velikosti je nastavení MinimumWidth
a MaximumWidth
vlastností na požadovanou šířku okna a MinimumHeight
MaximumHeight
vlastnosti na požadovanou výšku okna. Tím se aktivuje změna velikosti a vlastnosti pak můžete vrátit zpět k původním hodnotám:
Window.MinimumWidth = 700;
Window.MaximumWidth = 700;
Window.MinimumHeight = 500;
Window.MaximumHeight = 500;
// Give the Window time to resize
Dispatcher.Dispatch(() =>
{
Window.MinimumWidth = 0;
Window.MinimumHeight = 0;
Window.MaximumWidth = double.PositiveInfinity;
Window.MaximumHeight = double.PositiveInfinity;
});
Oddělení správy oken od třídy aplikace
Správu oken lze oddělit od App
třídy vytvořením třídy, která implementuje IWindowCreator rozhraní, a přidáním kódu pro správu oken do CreateWindow metody:
public class WindowCreator : IWindowCreator
{
public Window CreateWindow(Application app, IActivationState activationState)
{
var window = new Window(new ContentPage
{
Content = new Grid
{
new Label
{
Text = "Hello from IWindowCreator",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center
}
}
});
return window;
}
}
MauiProgram
Ve třídě byste pak měli typ správy oken zaregistrovat jako závislost v kontejneru služby aplikace:
builder.Services.AddSingleton<IWindowCreator, WindowCreator>();
Důležité
Ujistěte se, že registrační kód určuje IWindowCreator
rozhraní i jeho konkrétní typ.
Pak se ujistěte, že vaše App
třída nenastaví MainPage
vlastnost:
public partial class App : Application
{
public App()
{
InitializeComponent();
}
}
Za předpokladu IWindowCreator , že rozhraní a jeho konkrétní typ byly registrovány v kontejneru služby aplikace a že MainPage vlastnost Application třídy není nastavena, váš registrovaný typ se použije k vytvoření Window.