web-dev-qa-db-ja.com

メッセージダイアログにテキスト入力しますか? ContentDialog?

ユーザーがWindows10ユニバーサルアプリのMessageDialogにテキストを入力できるようにするための最良の方法は何でしょうか(パスワードシステムを忘れた場合)。私が行った調査によると、これはMessageDialogでは不可能と思われますが、ContentDialogでは実現できます。これまでのところ、ContentDialogの使用方法を大まかに説明しているが、テキスト入力は使用していない this サイト、および およびMSDNのこの記事 の使用方法を示しているサイトを見つけました。 ContentDialogを含むテキストボックスですが、示されているメソッドは私には非常に複雑に思えます。

それで、誰かがこれを行うためのより単純な方法を知っていますか、それともMSDNの方法が最も簡単な方法ですか?

助けてくれてありがとう

ネイサン

12
Xylynx

はい、これがあなたが探しているものを達成するための厳密な最小値です:

enter image description here

ページ:

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace App1
{
    public sealed partial class MainPage
    {
        public MainPage()
        {
            InitializeComponent();
            Loaded += MainPage_Loaded;
        }

        private async void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            var dialog1 = new ContentDialog1();
            var result = await dialog1.ShowAsync();
            if (result == ContentDialogResult.Primary)
            {
                var text = dialog1.Text;
            }
        }
    }
}

ダイアログ(コード):

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace App1
{
    public sealed partial class ContentDialog1 : ContentDialog
    {
        public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
            "Text", typeof (string), typeof (ContentDialog1), new PropertyMetadata(default(string)));

        public ContentDialog1()
        {
            InitializeComponent();
        }

        public string Text
        {
            get { return (string) GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }

        private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
        }

        private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
        }
    }
}

ダイアログ(XAML):

<ContentDialog x:Class="App1.ContentDialog1"
               xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
               xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
               xmlns:d="http://schemas.Microsoft.com/expression/blend/2008"
               xmlns:local="using:App1"
               xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
               x:Name="ContentDialog"
               Title="TITLE"
               PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
               PrimaryButtonText="Button1"
               SecondaryButtonClick="ContentDialog_SecondaryButtonClick"
               SecondaryButtonText="Button2"
               mc:Ignorable="d">

    <Grid>
        <TextBox Text="{Binding ElementName=ContentDialog, Path=Text, Mode=TwoWay}" />
    </Grid>
</ContentDialog>
16
Aybe

私はそのような関数を使用して、ユーザーにテキストを要求します。

private async Task<string> InputTextDialogAsync(string title)
{
    TextBox inputTextBox = new TextBox();
    inputTextBox.AcceptsReturn = false;
    inputTextBox.Height = 32;
    ContentDialog dialog = new ContentDialog();
    dialog.Content = inputTextBox;
    dialog.Title = title;
    dialog.IsSecondaryButtonEnabled = true;
    dialog.PrimaryButtonText = "Ok";
    dialog.SecondaryButtonText = "Cancel";
    if (await dialog.ShowAsync() == ContentDialogResult.Primary)
        return inputTextBox.Text;
    else
        return "";
}

およびその使用法:

string text = await InputTextDialogAsync("Title");
14
Kibernetik

Height = 32の代わりに、これを使用します。

public static async Task<string> ShowAddDialogAsync(string title)
    {
        var inputTextBox = new TextBox { AcceptsReturn = false };
        (inputTextBox as FrameworkElement).VerticalAlignment = VerticalAlignment.Bottom;
        var dialog = new ContentDialog
        {
            Content = inputTextBox,
            Title = title,
            IsSecondaryButtonEnabled = true,
            PrimaryButtonText = "Ok",
            SecondaryButtonText = "Cancel"
        };
        if (await dialog.ShowAsync() == ContentDialogResult.Primary)
            return inputTextBox.Text;
        else
            return "";
    }
0
laszloj