2015-12-30 20 views
8

Bir kullanıcının bir Windows 10 evrensel uygulamasında bir MessageDialog'a metin girmesine izin vermenin en iyi yolunun ne olduğunu merak ediyorum (Şifremi unuttum sistemi). Yaptığım araştırmadan bir MessageDialog ile mümkün görünmüyor, ancak bir ContentDialog ile gerçekleştirilebilir. Şimdiye kadar ContentDialog'u nasıl kullanacağımı, ancak metin girdisi ile kullanmadığını ve ContentDialog ile bir metin kutusunun nasıl kullanıldığını gösteren and this article on MSDN'u açıklayan this sitesini buldum ancak gösterilen yöntem bana oldukça karmaşık görünüyor.Mesaj iletişiminde metin girişi var mı? ContentDialog?

Peki, bunu yapmanın daha basit bir yolunu bilen var mı, yoksa en kolay yolunu alacağı MSDN yolu mu? Herhangi bir yardım için

Teşekkür

Nathan

cevap

13

Evet, burada aradığınızı elde etmek için sıkı asgari var:

enter image description here

Sayfa:

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; 
      } 
     } 
    } 
} 

iletişim (kodu):

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) 
     { 
     } 
    } 
} 

iletişim (XAML):

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

ve kullanımı:

<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> 
7

Ben kullanıcı metin istemek için bu işlevini kullanın:

string text = await InputTextDialogAsync("Title"); 
+0

hey @Kibernetik, bu harika! –