Udostępnij za pośrednictwem


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 do double.PositiveInfinity.
  • MaximumWidth, typu double, reprezentuje maksymalną szerokość okna na platformach klasycznych. Prawidłowe wartości to od 0 do double.PositiveInfinity.
  • MinimumHeight, typu double, reprezentuje minimalną wysokość okna na platformach klasycznych. Prawidłowe wartości to od 0 do double.PositiveInfinity.
  • MinimumWidth, typu double, reprezentuje minimalną szerokość okna na platformach klasycznych. Prawidłowe wartości to od 0 do double.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 dowolnego string stanu State dla właściwości BackgroundingEventArgs obiektu, który system operacyjny zachowa do czasu wznowienia okna. Po wznowieniu okna stan jest udostępniany za pośrednictwem argumentu IActivationState metody CreateWindow .
  • 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 Xwłaściwości , Y, Widthi Height na Window obiekcie.

Ostrzeżenie

Mac Catalyst nie obsługuje programowego zmieniania rozmiaru ani zmieniania położenia okien przez ustawienie Xwłaściwości , Y, Widthi 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ć Xwłaściwości , Y, Widthi 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 .