Okno podręczne
Wyskakujące okienka to bardzo typowy sposób prezentowania informacji użytkownikowi, który odnosi się do bieżącego zadania. Systemy operacyjne zapewniają sposób wyświetlania komunikatu i wymagają odpowiedzi od użytkownika. Te alerty są zwykle restrykcyjne pod względem zawartości, która może zapewnić deweloper, a także układ i wygląd.
Uwaga
Jeśli chcesz przedstawić coś użytkownikowi, który jest bardziej subtelny, sprawdź nasze opcje Wyskakujące i Przekąski .
Widok Popup
umożliwia deweloperom tworzenie własnego niestandardowego interfejsu użytkownika i prezentowanie go użytkownikom.
Tworzenie okna podręcznego
Element Popup
można utworzyć w języku XAML lub C#:
XAML
Dołączanie przestrzeni nazw XAML
Aby można było używać zestawu narzędzi w języku XAML, należy dodać następujące xmlns
elementy do strony lub widoku:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
W związku z tym następujące elementy:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
</ContentPage>
Zostanie zmodyfikowana tak, aby zawierała następujące xmlns
elementy:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
</ContentPage>
Definiowanie okna podręcznego
Należy pamiętać, że jeśli element Popup
został utworzony w języku XAML, musi również mieć kod C# za plikiem. Aby dowiedzieć się, dlaczego jest to wymagane, zapoznaj się z tą stroną dokumentacji programu .NET MAUI.
Najprostszym sposobem utworzenia obiektu Popup
jest dodanie nowego .NET MAUI ContentView (XAML)
elementu do projektu, a następnie zmianę każdego z plików na następujące:
<toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="MyProject.SimplePopup">
<VerticalStackLayout>
<Label Text="This is a very important message!" />
</VerticalStackLayout>
</toolkit:Popup>
public partial class SimplePopup : Popup
{
public SimplePopup()
{
InitializeComponent();
}
}
Ważne
Jeśli kod pliku nie zostanie utworzony wraz z wywołaniem metody , InitializeComponent
podczas próby wyświetlenia elementu Popup
zostanie zgłoszony wyjątek .
C#
using CommunityToolkit.Maui.Views;
var popup = new Popup
{
Content = new VerticalStackLayout
{
Children =
{
new Label
{
Text = "This is a very important message!"
}
}
}
};
Prezentowanie wyskakującego okienka
Po utworzeniu Popup
obiektu można go przedstawić przy użyciu naszych Popup
metod rozszerzeń lub implementacji IPopupService
z tego zestawu narzędzi.
Ważne
Obiekt Popup
można wyświetlić tylko z Page
implementacji lub dziedziczonej z Page
klasy .
using CommunityToolkit.Maui.Views;
public class MyPage : ContentPage
{
public void DisplayPopup()
{
var popup = new SimplePopup();
this.ShowPopup(popup);
}
}
Zamykanie okna podręcznego
Istnieją 2 różne sposoby, które Popup
można zamknąć; programowo lub naciskając poza wyskakującym okienkiem.
Programowe zamykanie okna podręcznego
Aby zamknąć Popup
dewelopera, musi wywołać Close
lub CloseAsync
na Popup
sam. Jest to zwykle wykonywane przez odpowiadanie na naciśnięcie przycisku od użytkownika.
Możemy ulepszyć poprzedni przykład XAML, dodając przycisk OKButton
:
<toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="MyProject.SimplePopup">
<VerticalStackLayout>
<Label Text="This is a very important message!" />
<Button Text="OK"
Clicked="OnOKButtonClicked" />
</VerticalStackLayout>
</toolkit:Popup>
W wynikowej procedurze obsługi zdarzeń wywołujemy Close
metodę , spowoduje to programowe zamknięcie obiektu Popup
.
Uwaga
Close()
jest metodą fire-and-forget. Zostanie on ukończony i powróci do wątku wywołującego, zanim system operacyjny odrzuci Popup
element z ekranu. Jeśli musisz wstrzymać wykonywanie kodu, dopóki system operacyjny nie odrzuci Popup
go z ekranu, użyj polecenia zamiast CloseAsync()
.
public partial class MySimplePopup : Popup
{
// ...
void OnOKButtonClicked(object? sender, EventArgs e) => Close();
}
W wynikowej procedurze obsługi zdarzeń wywołujemy CloseAsync
metodę , spowoduje to programowe zamknięcie Popup
obiektu wywołującego do metody, await
dopóki system operacyjny nie odrzuci Popup
elementu z ekranu.
public partial class MySimplePopup : Popup
{
// ...
async void OnOKButtonClicked(object? sender, EventArgs e)
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
await CloseAsync(token: cts.Token);
await Toast.Make("Popup Dismissed By Button").Show();
}
}
Naciśnięcie na zewnątrz okna podręcznego
Domyślnie użytkownik może nacisnąć poza element , Popup
aby go odrzucić. Można to kontrolować za pomocą CanBeDismissedByTappingOutsideOfPopup
właściwości . Ustawienie tej właściwości w taki sposób, aby false
uniemożliwić użytkownikowi odrzucenie obiektu Popup
przez naciśnięcie poza nią.
Zwracanie wyniku
Deweloper będzie często szukał odpowiedzi od użytkownika. Popup
Widok umożliwia deweloperom zwrócenie wyniku, którego można oczekiwać i na które działa.
Możemy ulepszyć nasz oryginalny przykład XAML, aby pokazać, jak można to osiągnąć:
XAML
Dodając 2 nowe przyciski do kodu XAML:
<toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="MyProject.SimplePopup">
<VerticalStackLayout>
<Label Text="This is a very important message! Do you agree?" />
<Button Text="Yes"
Clicked="OnYesButtonClicked" />
<Button Text="No"
Clicked="OnNoButtonClicked" />
</VerticalStackLayout>
</toolkit:Popup>
Następnie dodaj następujące programy obsługi zdarzeń w języku C#:
async void OnYesButtonClicked(object? sender, EventArgs e)
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
await CloseAsync(true, cts.Token);
}
async void OnNoButtonClicked(object? sender, EventArgs e)
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
await CloseAsync(false, cts.Token);
}
Metoda Close
umożliwia object
dostarczenie wartości. Będzie to wynikowa wartość zwracana. Aby oczekiwać na wynik, ShowPopupAsync
należy użyć metody w następujący sposób:
using CommunityToolkit.Maui.Views;
public class MyPage : ContentPage
{
public async Task DisplayPopup()
{
var popup = new SimplePopup();
var result = await this.ShowPopupAsync(popup, CancellationToken.None);
if (result is bool boolResult)
{
if (boolResult)
{
// Yes was tapped
}
else
{
// No was tapped
}
}
}
}
Uwaga
Aby obsłużyć naciśnięcie poza obiektem Popup
, gdy również oczekuje na wynik, możesz zmienić wartość zwracaną za pośrednictwem ResultWhenUserTapsOutsideOfPopup
właściwości .
Style
Klasa Popup
umożliwia korzystanie ze stylów MAUI platformy .NET, aby ułatwić udostępnianie typowych ustawień wizualnych w wielu oknach podręcznych.
W poniższym przykładzie pokazano, jak zdefiniować styl, który ma zastosowanie do przykładu SimplePopup
z poprzedniej sekcji.
<toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:popups="clr-namespace:CommunityToolkit.Maui.Sample.Views.Popups"
x:Class="MyProject.SimplePopup">
<toolkit:Popup.Resources>
<Style TargetType="{x:Type popups:SimplePopup}">
<Setter Property="Size" Value="100,200" />
<Setter Property="Color" Value="Green" />
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="Start" />
<Setter Property="CanBeDismissedByTappingOutsideOfPopup" Value="True" />
</Style>
</toolkit:Popup.Resources>
<VerticalStackLayout>
<Label Text="This is a very important message! Do you agree?" />
<Button Text="Yes"
Clicked="OnYesButtonClicked" />
<Button Text="No"
Clicked="OnNoButtonClicked" />
</VerticalStackLayout>
</toolkit:Popup>
Uwaga
Tworząc obiekt Style
docelowy Popup
i chcesz zastosować je do niestandardowych wyskakujących okienek, takich jak SimplePopup
przykład, upewnij się, że właściwość jest ApplyToDerivedTypes
ustawiona Style
na definicji.
Właściwości
Właściwości | Type | Opis |
---|---|---|
Anchor |
View |
Pobiera lub ustawia kotwicę View . Kotwica to miejsce, w którym okienko podręczne będzie renderowane najbliżej. Po skonfigurowaniu kotwicy wyskakujące okienko pojawi się wyśrodkowane nad kontrolką lub jak najbliżej tej kontrolki. |
CanBeDismissedByTappingOutsideOfPopup |
bool |
Pobiera lub ustawia wartość wskazującą, czy wyskakujące okienko może zostać odrzucone przez naciśnięcie spoza okna podręcznego. W systemie Android — jeśli przycisk wstecz sprzętu jest wyłączony. |
Color |
Color |
Pobiera lub ustawia Color wyskakujące okienka. Ten kolor ustawia natywny Popup kolor tła elementu , który jest niezależny od dowolnego koloru tła skonfigurowanego w rzeczywistej wartości Content . |
Content |
View |
Pobiera lub ustawia zawartość do renderowania View w obiekcie Popup . |
HorizontalOptions |
LayoutAlignment |
Pobiera lub ustawia LayoutAlignment element do ustawiania Popup pozycji poziomej na ekranie. |
Result |
Task<object?> |
Pobiera końcowy wynik odrzuconego Popup obiektu . |
Size |
Size |
Pobiera lub ustawia Size wyświetlanie wyskakujących okienek. Okno podręczne zawsze będzie próbowało ograniczyć rzeczywisty rozmiar Popup do rozmiaru widoku, chyba że Size zostanie określony.
Popup Jeśli używa HorizontalOptions właściwości lubVerticalOptions , które nie są wartościami domyślnymi, ta Size właściwość jest wymagana. |
VerticalOptions |
LayoutAlignment |
Pobiera lub ustawia element LayoutAlignment do pozycjonowania Popup w pionie na ekranie. |
Zdarzenia
Wydarzenie | Opis |
---|---|
Closed |
Występuje po Popup zamknięciu. |
Opened |
Występuje po otwarciu Popup . |
Przykłady
Przykład tej funkcji można znaleźć w aplikacji przykładowej zestawu narzędzi .NET MAUI Community Toolkit.
interfejs API
Kod źródłowy można Popup
znaleźć w repozytorium GitHub zestawu narzędzi .NET MAUI Community Toolkit.
.NET MAUI Community Toolkit