.NET MAUIでポップアップで文字入力ができるDisplayPromptAsyncを試す

C# コンピュータ
C#
DisplayPromptAsyncのサンプル

ソースコード

ファイル名:MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="SampleLabel2.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">

            <HorizontalStackLayout
                Spacing="25"
                Padding="30,0"
                HorizontalOptions="Center">
                    <Label
                    x:Name="MemoLbl"
                    FontSize="24"
                    Text="メモ"
                    HorizontalOptions="Center" />

                <Button
                    x:Name="EditMemoBtn"
                    Text="編集"
                    Clicked="OnEditMemoBtnClicked"
                    HorizontalOptions="Center" />
            </HorizontalStackLayout>
        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

ファイル名:MainPage.xaml.cs

namespace SampleLabel2;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnEditMemoBtnClicked(object sender, EventArgs e)
    {
        string memo = MemoLbl.Text;
        string result = await DisplayPromptAsync("タイトル", "メッセージ",initialValue: memo);
        if (result != null)
        {
            MemoLbl.Text = result;
        }
    }
}

実行

「編集」ボタンを押すとポップアップで1行入力のプロンプトが表示されます。

※エミュレーターの設定で日本語表示を可能にし日本語入力ができるようにしておきました。

DisplayPromptAsync("タイトル", "メッセージ",initialValue: memo);

initialValueに入力項目の初期値をセットすることが出来るので、今回は編集前のLabelの文字列をセットしてみました。

文字を編集し「OK」ボタンを押します。ちなみに「Cancel」ボタンを押すとDisplayPromptAsync()からnullが戻り、その場合プログラムではLabelの文字列を変更しないようにしています

ラベルの文字が変更されました。
以上

追記20230621
DisplayPromptAsync()はwinformsのMessageBox()の様にどこからでも実行できると考えていたのですが、ContentPageの親クラスのPageのメソッドとして定義されていますので、ContentPage内で呼び出すことに成ります。
ViewModel内で呼び出そうとしていたのですが、どうにも上手く行かず、そもそもするべきではない行為ではないかと思い至りました。コードビハインドで対応することにします。

コメント