ソースコード
<?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;
}
}
}
実行
※エミュレーターの設定で日本語表示を可能にし日本語入力ができるようにしておきました。
DisplayPromptAsync("タイトル", "メッセージ",initialValue: memo);
initialValueに入力項目の初期値をセットすることが出来るので、今回は編集前のLabelの文字列をセットしてみました。
文字を編集し「OK」ボタンを押します。ちなみに「Cancel」ボタンを押すとDisplayPromptAsync()
からnullが戻り、その場合プログラムではLabelの文字列を変更しないようにしています。
ラベルの文字が変更されました。
以上
DisplayPromptAsync()はwinformsのMessageBox()の様にどこからでも実行できると考えていたのですが、ContentPageの親クラスのPageのメソッドとして定義されていますので、ContentPage内で呼び出すことに成ります。
ViewModel内で呼び出そうとしていたのですが、どうにも上手く行かず、そもそもするべきではない行為ではないかと思い至りました。コードビハインドで対応することにします。
コメント