2015-12-30 16 views
8

Mi chiedo quale sia il modo migliore per consentire a un utente di inserire il testo in una MessageDialog in un'app universale di Windows 10. (Ho dimenticato il sistema di password). Dalla ricerca che ho fatto questo non sembra possibile con un MessageDialog ma può essere realizzato con un ContentDialog. Finora ho trovato il sito this che spiega approssimativamente come usare ContentDialog, ma non con l'input di testo, e and this article on MSDN che mostra come utilizzare una casella di testo con una ContentDialog ma il metodo mostrato mi sembra abbastanza complesso.Immissione di testo nella finestra di dialogo del messaggio? ContentDialog?

Quindi, qualcuno sa di un modo più semplicistico di farlo o il modo MSDN è il più semplice che otterrà?

Grazie per qualsiasi aiuto

Nathan

risposta

13

Sì, ecco il minimo indispensabile per ottenere quello che stai cercando:

enter image description here

Pagina:

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

Dialog (codice):

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

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

Io uso questa funzione per richiedere il testo da utente:

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

e il suo utilizzo:

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

hey @Kibernetik, questo è fantastico! –

Problemi correlati