Megosztás a következőn keresztül:


Érték visszaadása előugró ablakból

A .NET MAUI közösségi eszközkészlet lehetővé teszi egy előugró ablak megjelenítését a felhasználó számára. Az eszközkészlet egy gyakori, összetettebb forgatókönyvet is lehetővé tesz, amelyben a fejlesztő megjelenít egy Popup, és await annak eredménye vissza lesz adva, amikor az Popup el van utasítva. Ez az oldal bemutatja, hogyan használható az Popup<T> osztály a kívánt viselkedés eléréséhez.

Előugró ablak létrehozása

A Popup<T> következő módon hozható létre XAML-ben vagy C#-ban:

Előugró ablak létrehozása az XAML-ben

Az alábbi szakasz bemutatja, hogyan hozhat létre Popup<T> XAML-t.

Az előugró ablak definiálása

A legegyszerűbb módja egy Popup<T> létrehozásának az, ha hozzáad egy új .NET MAUI ContentView (XAML) elemet a projekthez, ami két fájlt hoz létre: egy *.xaml fájlt és egy *.xaml.cs fájlt. Az egyes fájlok tartalma a következőre cserélhető:

XAML-fájl
<toolkit:Popup
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:system="clr-namespace:System;assembly=mscorlib"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
    Padding="10"
    x:TypeArguments="system:Boolean"
    x:Class="MyProject.ReturnResultPopup">

    <VerticalStackLayout Spacing="6">
        <Label Text="This is a very important message! Do you agree?" />

        <Button Text="Yes" 
                Clicked="OnYesButtonClicked" />

        <Button Text="No"
                Clicked="OnNoButtonClicked" />
    
    </VerticalStackLayout>
    
</toolkit:Popup>

Az XAML használata x:TypeArguments lehetővé teszi egy általános típus típusparaméterének megadását.

XAML Code-Behind fájl
public partial class ReturnResultPopup : Popup<bool>
{
    public ReturnResultPopup()
    {
        InitializeComponent();
    }

    async void OnYesButtonClicked(object? sender, EventArgs e)
    {
        await CloseAsync(true);
    }
    
    async void OnNoButtonClicked(object? sender, EventArgs e)
    {
        await CloseAsync(false);
    }
}

A Popup<bool> használatának meg kell egyeznie az XAML-ben lévő definícióval x:TypeArguments használatával.

Fontos

Ha a háttérkód fájl nem jön létre a InitializeComponent hívással együtt, akkor a rendszer kivételt dob, amikor megpróbálja megjeleníteni a Popup-et.

Előugró ablak létrehozása C nyelven#

Az alábbi szakasz bemutatja, hogyan hozhat létre C#- Popup ot.

using CommunityToolkit.Maui.Views;

namespace MyProject;

public class ReturnResultPopup : Popup<bool>
{
    public ReturnResultPopup()
    {
        var yesButton = new Button { Text = "Yes" };
        yesButton.Clicked += OnYesButtonClicked;

        var noButton = new Button { Text = "No" };
        noButton.Clicked += OnNoButtonClicked;

        Content = new VerticalStackLayout
        {
            Children = 
            {
                new Label { Text = "This is a very important message! Do you agree?" },
                
                yesButton,
                noButton
            }
        };
    }

    async void OnYesButtonClicked(object? sender, EventArgs e)
    {
        await CloseAsync(true);
    }
    
    async void OnNoButtonClicked(object? sender, EventArgs e)
    {
        await CloseAsync(false);
    }
}

A CloseAsync metódus lehetővé teszi egy érték megküldését, ez lesz az eredményül kapott visszatérési érték. A generikusok Popup<T> használata típusbiztonságot biztosít egy előugró ablakból származó értékek visszaadásakor.

Várakozás az előugró ablakból származó eredményre

Az eredmény várásához a módszert az ShowPopupAsync alábbiak szerint kell használni:

using CommunityToolkit.Maui.Views;

public class MyPage : ContentPage
{
    public async Task DisplayPopup()
    {
        var popup = new ReturnResultPopup();

        // The type parameter must match the type returned from the popup.
        IPopupResult<bool> popupResult = await this.ShowPopupAsync<bool>(popup, PopupOptions.Empty, CancellationToken.None);

        if (popupResult.WasDismissedByTappingOutsideOfPopup)
        {
            return;
        }

        if (popupResult.Result is true)
        {
            // Yes was tapped
        }
        else
        {
            // No was tapped
        }
    }
}

Eredménnyel rendelkező előugró ablak

Megjegyzés:

Ha WasDismissedByTappingOutsideOfPopuptrue, akkor a Result tulajdonság mindig null vagy default lesz.

Felugró ablakok

Az PopupOptions osztály lehetővé teszi a megjelenített Popupszegély, árnyék, PageOverlayColor stb. testreszabását.

További információért tekintse meg a PopupOptions dokumentációját .

Példák

Erre a funkcióra a .NET MAUI community toolkit mintaalkalmazásban talál példát.

API

A Popup forráskódját a .NET MAUI Community Toolkit GitHub-adattártalálhatja meg.

További források