【问题标题】:Text input in message dialog? ContentDialog?消息对话框中的文本输入?内容对话框?
【发布时间】:2016-04-04 23:10:57
【问题描述】:

我想知道在 Windows 10 通用应用程序中允许用户在 MessageDialog 中输入文本的最佳方式是什么。(忘记密码系统)。从我所做的研究来看,这似乎用 MessageDialog 是不可能的,但可以用 ContentDialog 来完成。到目前为止,我发现this 网站大致解释了如何使用 ContentDialog,但不包括文本输入,and this article on MSDN 确实显示了如何使用带有 ContentDialog 的文本框,但显示的方法对我来说似乎相当复杂。

那么,有谁知道这样做的更简单的方法,或者 MSDN 方法是最简单的方法吗?

感谢您的帮助

内森

【问题讨论】:

    标签: c# xaml dialog windows-10 win-universal-app


    【解决方案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");
      

      【讨论】:

      • 嘿@Kibernetik,这太棒了!
      【解决方案3】:

      用这个代替 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 "";
          }
      

      【讨论】:

      • 不需要转换为as FrameworkElement。但除此之外 +1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多