Windows .NET MAUI
Klasa interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) Window umożliwia tworzenie, konfigurowanie, wyświetlanie i zarządzanie wieloma oknami.
Window definiuje następujące właściwości:
- FlowDirection, typu
FlowDirection
, definiuje kierunek, w którym ułożono element interfejsu użytkownika okna. - Height, typu
double
, określa wysokość okna w systemie Windows. - MaximumHeight, typu
double
, reprezentuje maksymalną wysokość okna na platformach klasycznych. Prawidłowe wartości to od 0 dodouble.PositiveInfinity
. - MaximumWidth, typu
double
, reprezentuje maksymalną szerokość okna na platformach klasycznych. Prawidłowe wartości to od 0 dodouble.PositiveInfinity
. - MinimumHeight, typu
double
, reprezentuje minimalną wysokość okna na platformach klasycznych. Prawidłowe wartości to od 0 dodouble.PositiveInfinity
. - MinimumWidth, typu
double
, reprezentuje minimalną szerokość okna na platformach klasycznych. Prawidłowe wartości to od 0 dodouble.PositiveInfinity
. - Overlays, typu
IReadOnlyCollection<IWindowOverlay>
, reprezentuje kolekcję nakładek okien. - Page, typu Page, wskazuje stronę wyświetlaną przez okno. Ta właściwość jest właściwością Window zawartości klasy i dlatego nie musi być jawnie ustawiana.
- Title, typu
string
, reprezentuje tytuł okna. - Width, typu
double
, określa szerokość okna w systemie Windows. - X, typu
double
, określa współrzędną X okna w systemie Windows. - Y, typu
double
, określa współrzędną Y okna w systemie Windows.
Te właściwości, z wyjątkiem Overlays
właściwości, są wspierane przez BindableProperty obiekty, co oznacza, że mogą być obiektami docelowymi powiązań danych i stylizowany.
Klasa Window definiuje następujące zdarzenia:
- Created, który jest zgłaszany podczas tworzenia okna.
- Resumed, który jest zgłaszany po wznowieniu okna ze stanu uśpienia.
- Activated, który jest zgłaszany po aktywowaniu okna.
- Deactivated, który jest zgłaszany, gdy okno jest dezaktywowane.
- Stopped, który jest zgłaszany po zatrzymaniu okna.
- Destroying, który jest zgłaszany, gdy okno zostanie zniszczone.
- SizeChanged, który jest wywoływany na platformach klasycznych, gdy okno zmienia rozmiar.
- Backgrounding, z towarzyszącym
BackgroundingEventArgs
obiektem, który jest wywoływany w systemach iOS i Mac Catalyst po zamknięciu okna lub wchodzi w stan tła. To zdarzenie może służyć do utrwalania dowolnegostring
stanuState
dla właściwościBackgroundingEventArgs
obiektu, który system operacyjny zachowa do czasu wznowienia okna. Po wznowieniu okna stan jest udostępniany za pośrednictwem argumentuIActivationState
metodyCreateWindow
. - DisplayDensityChanged, z towarzyszącym
DisplayDensityChangedEventArgs
obiektem, który jest wywoływany w systemach Android i Windows, gdy obowiązujące kropki na cal (DPI) dla okna uległy zmianie.
Aby uzyskać więcej informacji na temat zdarzeń cyklu życia i skojarzonych z nimi przesłonięć, zobacz Cykl życia aplikacji.
Klasa Window definiuje również następujące zdarzenia nawigacji modalnej:
- ModalPopped, z elementem
ModalPoppedEventArgs
, który jest wywoływany, gdy widok został zwinięty modalnie. - ModalPopping, z elementem
ModalPoppingEventArgs
, który jest wywoływany, gdy widok jest modalnie zwinięty. - ModalPushed, z
ModalPushedEventArgs
, który jest podniesiony po widoku został wypchnięty modalnie. - ModalPushing, z elementem
ModalPushingEventArgs
, który jest wywoływany, gdy widok jest modalnie wypychany. - PopCanceled, który jest zgłaszany po anulowaniu modalnego wyskakującego okienka.
Klasa VisualElement ma Window
właściwość, która uwidacznia obiekt nadrzędny Window . Dostęp do tej właściwości można uzyskać z dowolnej strony, układu lub widoku w celu manipulowania Window obiektami.
Tworzenie okna
Domyślnie program .NET MAUI tworzy Window obiekt podczas ustawiania MainPage
właściwości na Page obiekt w App
klasie. Można jednak również zastąpić metodę CreateWindow
Window w klasie, App
aby utworzyć obiekt:
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 Klasa ma konstruktor domyślny i konstruktor, który akceptuje Page argument, który reprezentuje stronę główną aplikacji, można również wywołać metodę podstawowąCreateWindow
, aby zwrócić utworzony Window obiekt .NET MAUI.
Domyślnie aplikacja .NET MAUI zastępuje CreateWindow
metodę Window w klasie, App
aby utworzyć obiekt:
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState? activationState)
{
return new Window(new AppShell());
}
}
}
Klasa Window ma konstruktor domyślny i konstruktor, który akceptuje Page argument, który reprezentuje stronę główną aplikacji.
Ponadto możesz również utworzyć własny Windowobiekt pochodny:
namespace MyMauiApp
{
public class MyWindow : Window
{
public MyWindow() : base()
{
}
public MyWindow(Page page) : base(page)
{
}
// Override Window methods
}
}
Klasę Windowpochodną MyWindow
można następnie użyć, tworząc obiekt w przesłonięć CreateWindow
App
w klasie.
Niezależnie od sposobu Window tworzenia obiektu będzie on elementem nadrzędnym strony głównej w aplikacji.
Obsługa wielu okien
Wiele okien można otwierać jednocześnie w systemach Android, iOS na iPad (iPadOS), Mac Catalyst i Windows. Można to osiągnąć, tworząc Window obiekt i otwierając go przy użyciu OpenWindow
metody w Application
obiekcie:
Window secondWindow = new Window(new MyPage());
Application.Current?.OpenWindow(secondWindow);
Kolekcja Application.Current.Windows
typu IReadOnlyList<Window>
przechowuje odwołania do wszystkich Window obiektów zarejestrowanych w Application
obiekcie.
Konkretne okno można przywieźć do przodu na Mac Catalyst i Windows za pomocą Application.Current.ActivateWindow
metody :
Application.Current?.ActivateWindow(secondWindow);
System Windows można zamknąć za pomocą Application.Current.CloseWindow
metody :
// Close a specific window
Application.Current?.CloseWindow(secondWindow);
// Close the active window
Application.Current?.CloseWindow(GetParentWindow());
Ważne
Obsługa wielu okien działa w systemie Windows bez dodatkowej konfiguracji. Jednak wymagana jest dodatkowa konfiguracja w systemach Android, iPadOS i Mac Catalyst.
Konfiguracja systemu Android
Aby korzystać z obsługi wielu okien w systemie Android, należy zmienić tryb uruchamiania MainActivity
w obszarze Platformy android > > MainActivity.cs z LaunchMode.SingleTop
na :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
{
}
Konfiguracja systemów iPadOS i macOS
Aby użyć obsługi wielu okien w systemach iPadOS i Mac Catalyst, dodaj klasę o nazwie SceneDelegate
do folderów Platformy iOS i Platformy > > MacCatalyst:
using Foundation;
using Microsoft.Maui;
using UIKit;
namespace MyMauiApp;
[Register("SceneDelegate")]
public class SceneDelegate : MauiUISceneDelegate
{
}
Następnie w edytorze XML otwórz plik Platformy > iOS > Info.plist i plik Platformy > MacCatalyst > Info.plist i dodaj następujący kod XML na końcu każdego pliku:
<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>
Ważne
Obsługa wielu okien nie działa w systemie iOS dla telefonu iPhone.
Położenie i rozmiar okna
Położenie i rozmiar okna można programowo zdefiniować dla aplikacji .NET MAUI w systemie Windows, ustawiając X
właściwości , Y
, Width
i Height
na Window obiekcie.
Ostrzeżenie
Mac Catalyst nie obsługuje programowego zmieniania rozmiaru ani zmieniania położenia okien przez ustawienie X
właściwości , Y
, Width
i Height
.
Aby na przykład ustawić położenie i rozmiar okna podczas uruchamiania, należy zastąpić CreateWindow
metodę w App
klasie i ustawić X
właściwości , Y
, Width
i Height
na Window obiekcie:
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
};
}
Możesz też ustawić położenie i rozmiar okna przez uzyskanie Window
dostępu do właściwości z dowolnej strony, układu lub widoku. Na przykład poniższy kod pokazuje, jak umieścić okno w środku ekranu:
// 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;
Aby uzyskać informacje na temat uzyskiwania metryk ekranu urządzenia, zobacz Informacje o wyświetlaniu urządzenia.
Katalizator mac
Mac Catalyst nie obsługuje programowego zmieniania rozmiaru ani zmieniania położenia okien. Jednak obejściem umożliwiającym zmianę rozmiaru jest ustawienie MinimumWidth
właściwości i MaximumWidth
na żądaną szerokość okna oraz MinimumHeight
właściwości i MaximumHeight
na żądaną wysokość okna. Spowoduje to wyzwolenie zmiany rozmiaru i przywrócenie właściwości do ich oryginalnych wartości:
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;
});
Rozdziel zarządzanie oknami z klasy App
Zarządzanie oknami można rozdzielić z App
klasy, tworząc klasę, która implementuje IWindowCreator interfejs, i dodając kod zarządzania oknami w metodzie CreateWindow :
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;
}
}
Następnie w MauiProgram
klasie należy zarejestrować typ zarządzania oknami jako zależność w kontenerze usługi aplikacji:
builder.Services.AddSingleton<IWindowCreator, WindowCreator>();
Ważne
Upewnij się, że kod rejestracji określa IWindowCreator
interfejs, a także jego konkretny typ.
Następnie upewnij się, że App
klasa nie ustawia MainPage
właściwości:
public partial class App : Application
{
public App()
{
InitializeComponent();
}
}
Pod warunkiem, że IWindowCreator interfejs i jego typ betonowy zostały zarejestrowane w kontenerze usługi aplikacji i że MainPage właściwość Application klasy nie jest ustawiona, zarejestrowany typ zostanie użyty do utworzenia Windowklasy .