Ввод текста в диалоговом окне сообщения? ContentDialog?

Мне интересно, как лучше всего разрешить пользователю вводить текст в MessageDialog в универсальном приложении Windows 10 (система забытых паролей). Из исследования, которое я сделал, это не представляется возможным с помощью MessageDialog, но может быть выполнено с помощью ContentDialog. До сих пор я нашел этот сайт, который объясняет, как использовать ContentDialog, но не с текстовым вводом и и это статью о MSDN, которая показывает, как использовать текстовое поле с ContentDialog, но показанный метод кажется мне довольно сложным.

Итак, знает ли кто-нибудь более упрощенный способ сделать это, или это способ MSDN, который проще всего будет получать?

Спасибо за любую помощь

Натан

Ответ 1

Да, вот строгий минимум для достижения того, что вы ищете:

введите описание изображения здесь

Страница:

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>

Ответ 2

Я использую такую ​​функцию для запроса текста от пользователя:

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");

Ответ 3

Вместо высоты = 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 "";
    }