.NET MAUI für Windows
Die Klasse .NET Multi-platform App UI (.NET MAUI) Window bietet die Möglichkeit, mehrere Fenster zu erstellen, zu konfigurieren, anzuzeigen und zu verwalten.
Window definiert die folgenden Eigenschaften:
- FlowDirection, vom Typ
FlowDirection
, definiert die Richtung, in der das UI-Element des Fensters angeordnet ist. - Height, vom Typ
double
, gibt die Höhe des Fensters unter Windows an. - MaximumHeight, vom Typ
double
, stellt die maximale Höhe des Fensters auf Desktopplattformen dar. Gültige Werte liegen zwischen 0 unddouble.PositiveInfinity
. - MaximumWidth, vom Typ
double
, stellt die maximale Breite des Fensters auf Desktopplattformen dar. Gültige Werte liegen zwischen 0 unddouble.PositiveInfinity
. - MinimumHeight, vom Typ
double
, stellt die Mindesthöhe des Fensters auf Desktopplattformen dar. Gültige Werte liegen zwischen 0 unddouble.PositiveInfinity
. - MinimumWidth, vom Typ
double
, stellt die Mindestbreite des Fensters auf Desktopplattformen dar. Gültige Werte liegen zwischen 0 unddouble.PositiveInfinity
. - Overlays, vom Typ
IReadOnlyCollection<IWindowOverlay>
, stellt die Auflistung von Fensterüberlagerungen dar. - Page, vom Typ Page, gibt die Seite an, die vom Fenster angezeigt wird. Diese Eigenschaft ist die Inhaltseigenschaft der Klasse Window und muss daher nicht explizit festgelegt werden.
- Title, vom Typ
string
, stellt den Titel des Fensters dar. - Width, vom Typ
double
, gibt die Breite des Fensters unter Windows an. - X, vom Typ
double
, gibt die x-Koordinate des Fensters unter Windows an. - Y, vom Typ
double
, gibt die y-Koordinate des Fensters unter Windows an.
Alle diese Eigenschaften, mit Ausnahme der Overlays
-Eigenschaft, werden durch BindableProperty-Objekte gestützt, was bedeutet, dass die Eigenschaften Ziele von Datenverbindungen sein können.
Die Klasse Window definiert die folgenden Ereignisse:
- Created wird ausgelöst, wenn das Fenster erstellt wird.
- Resumed wird ausgelöst, wenn das Fenster aus einem Ruhezustand fortgesetzt wird.
- Activated wird ausgelöst, wenn das Fenster aktiviert wird.
- Deactivated wird ausgelöst, wenn das Fenster deaktiviert wird.
- Stopped wird ausgelöst, wenn das Fenster beendet wird.
- Destroying wird ausgelöst, wenn das Fenster zerstört wird.
- SizeChanged wird auf Desktopplattformen ausgelöst, wenn sich die Fenstergröße ändert.
- Backgrounding, mit einem begleitenden
BackgroundingEventArgs
-Objekt, das unter iOS und Mac Catalyst ausgelöst wird, wenn das Fenster geschlossen wird oder in einen Hintergrundzustand übergeht. Dieses Ereignis kann verwendet werden, um einen beliebigenstring
-Zustand in derState
-Eigenschaft desBackgroundingEventArgs
-Objekts zu erhalten, den das Betriebssystem beibehält, bis es Zeit ist, das Fenster wieder aufzunehmen. Wenn das Fenster wieder aufgenommen wird, wird der Status über dasIActivationState
-Argument derCreateWindow
-Methode bereitgestellt. - DisplayDensityChanged, mit einem begleitenden
DisplayDensityChangedEventArgs
-Objekt, das unter Android und Windows ausgelöst wird, wenn sich der effektive DPI-Wert (Dots per Inch) für das Fenster geändert hat.
Weitere Informationen über die Lebenszyklus-Ereignisse und ihre zugehörigen Überschreibungen finden Sie unter App-Lebenszyklus.
Die Window-Klasse definiert auch die folgenden modalen Navigationsereignisse:
- ModalPopped, mit
ModalPoppedEventArgs
, die ausgelöst wird, wenn eine Ansicht modal gepoppt wurde. - ModalPopping, mit
ModalPoppingEventArgs
, die ausgelöst wird, wenn eine Ansicht modal gepoppt wurde. - ModalPushed, mit
ModalPushedEventArgs
, die erhoben wird, nachdem eine Ansicht modal gepusht worden ist. - ModalPushing, mit
ModalPushingEventArgs
, die ausgelöst wird, wenn eine Ansicht modal gepusht wird. - PopCanceledwird ausgelöst, wenn ein modales Pop abgebrochen wird.
Die VisualElement-Klasse hat eine Window
-Eigenschaft, die das übergeordnete Window-Objekt offenlegt. Auf diese Eigenschaft kann von jeder Seite, jedem Layout oder jeder Ansicht aus zugegriffen werden, um Window-Objekte zu manipulieren.
Erstellen eines Fensters
Standardmäßig erstellt .NET MAUI ein Window-Objekt, wenn Sie die MainPage
-Eigenschaft auf ein Page-Objekt in Ihrer App
-Klasse setzen. Sie können jedoch auch die CreateWindow
-Methode in Ihrer App
-Klasse überschreiben, um ein Window-Objekt zu erstellen:
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;
}
}
}
Die Klasse Window hat einen Standardkonstruktor und einen Konstruktor, der ein Page-Argument akzeptiert, das die Stammseite der App darstellt. Sie können auch die Basismethode CreateWindow
aufrufen, um das von .NET MAUI erstellte Window-Objekt zurückzugeben.
Standardmäßig setzt Ihre .NET MAUI-App die CreateWindow
Methode in Ihrer App
Klasse außer Kraft, um ein Window Objekt zu erstellen:
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState? activationState)
{
return new Window(new AppShell());
}
}
}
Die Window Klasse verfügt über einen Standardkonstruktor und einen Konstruktor, der ein Page Argument akzeptiert, das die Stammseite der App darstellt.
Darüber hinaus können Sie auch Ihr eigenes Window-abgeleitetes Objekt erstellen:
namespace MyMauiApp
{
public class MyWindow : Window
{
public MyWindow() : base()
{
}
public MyWindow(Page page) : base(page)
{
}
// Override Window methods
}
}
Die Window-abgeleitete Klasse kann dann durch Erstellen eines MyWindow
-Objekts in der CreateWindow
-Überschreibung in Ihrer App
-Klasse verwendet werden.
Unabhängig davon, wie Ihr Window-Objekt erstellt wird, ist es das übergeordnete Objekt der Stammseite in Ihrer App.
Unterstützung für mehrere Fenster
Mehrere Fenster können auf Android, iOS auf iPad (iPadOS), Mac Catalyst und Windows gleichzeitig geöffnet werden. Dies kann erreicht werden, indem ein Window-Objekt erstellt und mithilfe der OpenWindow
-Methode für das Application
-Objekt geöffnet wird:
Window secondWindow = new Window(new MyPage());
Application.Current?.OpenWindow(secondWindow);
Die Application.Current.Windows
-Sammlung vom Typ IReadOnlyList<Window>
enthält Verweise auf alle Window-Objekte, die mit dem Application
-Objekt registriert sind.
Ein bestimmtes Fenster kann auf Mac Catalyst und Windows mit der Methode Application.Current.ActivateWindow
in den Vordergrund gebracht werden:
Application.Current?.ActivateWindow(secondWindow);
Windows kann mit der Application.Current.CloseWindow
-Methode geschlossen werden:
// Close a specific window
Application.Current?.CloseWindow(secondWindow);
// Close the active window
Application.Current?.CloseWindow(GetParentWindow());
Wichtig
Die Unterstützung für mehrere Fenster funktioniert unter Windows ohne zusätzliche Konfiguration. Allerdings ist eine zusätzliche Konfiguration auf Android, iPadOS und Mac Catalyst erforderlich.
Android-Konfiguration
Um die Unterstützung für mehrere Fenster unter Android zu nutzen, müssen Sie den MainActivity
Startmodus in Plattformen > Android > MainActivity.cs von LaunchMode.SingleTop
auf LaunchMode.Multiple
ändern:
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
{
}
iPadOS- und macOS-Konfiguration
Um die Unterstützung für mehrere Fenster auf iPadOS und Mac Catalyst zu verwenden, fügen Sie eine Klasse mit dem Namen SceneDelegate
zu den Ordnern Platforms > iOS und Platforms > MacCatalyst hinzu:
using Foundation;
using Microsoft.Maui;
using UIKit;
namespace MyMauiApp;
[Register("SceneDelegate")]
public class SceneDelegate : MauiUISceneDelegate
{
}
Öffnen Sie dann im XML-Editor die Datei Platforms > iOS > Info.plist und die Datei Platforms > MacCatalyst > Info.plist und fügen Sie die folgende XML-Datei am Ende jeder Datei hinzu:
<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>
Wichtig
Die Unterstützung für mehrere Fenster funktioniert nicht unter iOS für iPhone.
Position und Größe eines Fensters
Die Position und Größe eines Fensters kann für eine .NET MAUI-App unter Windows programmatisch definiert werden, indem die Eigenschaften X
, Y
, Width
und Height
für ein Window-Objekt festgelegt werden.
Warnung
Mac Catalyst unterstützt nicht die programmatische Größenänderung oder Neupositionierung von Fenstern durch Setzen der Eigenschaften X
, Y
, Width
und Height
.
Um beispielsweise die Fensterposition und -größe beim Start festzulegen, sollten Sie die Methode CreateWindow
in Ihrer Klasse App
außer Kraft setzen und die Eigenschaften X
, Y
, Width
und Height
auf ein Objekt Window setzen:
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
};
}
Alternativ kann ein Fenster durch Zugriff auf die Eigenschaft Window
von jeder Seite, jedem Layout oder jeder Ansicht aus positioniert und in der Größe verändert werden. Der folgende Code zeigt beispielsweise, wie ein Fenster in der Mitte des Bildschirms positioniert wird:
// 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;
Informationen zum Abrufen der Bildschirmmetriken des Geräts finden Sie unter Geräteanzeigeinformationen.
Mac Catalyst
Mac Catalyst unterstützt keine programmgesteuerte Größenänderung oder Neupositionierung von Fenstern. Um die Größenänderung zu ermöglichen, kann man jedoch die Eigenschaften MinimumWidth
und MaximumWidth
auf die gewünschte Breite des Fensters und die Eigenschaften MinimumHeight
und MaximumHeight
auf die gewünschte Höhe des Fensters setzen. Dadurch wird eine Größenänderung ausgelöst, und Sie können dann die Eigenschaften zurück zu ihren ursprünglichen Werten rückgängig machen:
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;
});
Entkoppeln der Fensterverwaltung von der App-Klasse
Die Fensterverwaltung kann von der App
-Klasse entkoppelt werden, indem eine Klasse erstellt wird, die die IWindowCreator-Schnittstelle implementiert, und der Code für die Fensterverwaltung in der CreateWindow-Methode hinzugefügt wird:
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;
}
}
Dann sollten Sie in der Klasse MauiProgram
Ihren Fenstermanagement-Typ als Abhängigkeit im Service-Container der App registrieren:
builder.Services.AddSingleton<IWindowCreator, WindowCreator>();
Wichtig
Stellen Sie sicher, dass Ihr Registrierungscode die IWindowCreator
-Schnittstelle sowie den konkreten Typ angibt.
Stellen Sie dann sicher, dass Ihre App
-Klasse die MainPage
-Eigenschaft nicht festgelegt hat:
public partial class App : Application
{
public App()
{
InitializeComponent();
}
}
Unter der Voraussetzung, dass die IWindowCreator-Schnittstelle und ihr konkreter Typ im Service-Container der App registriert wurden und dass die MainPage-Eigenschaft der Application-Klasse nicht gesetzt ist, wird Ihr registrierter Typ verwendet, um den Window zu erstellen.