2010-12-27 15 views
6

Sto leggendo un libro che diceDialogResult WPF

Invece di impostare il DialogResult a mano dopo che l'utente fa clic su un pulsante di , è possibile designare un pulsante come pulsante di accettazione (impostando IsDefault a vero). Facendo clic sul pulsante si imposta automaticamente il DialogResult della finestra su true. Analogamente, è possibile designare un pulsante come pulsante di annullamento (impostando IsCancel su true), nel qual caso facendo clic su di esso si imposta il DialogResult su Annulla.

Questa è la MainWindow:

<Window x:Class="WpfApplicationWPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Width="400" Height="400"> 
    <StackPanel> 

     <Button Name="BtnShowDialogStatus" Click="BtnShowDialogStatus_Click">DIALOG RESULT</Button> 
    </StackPanel> 
</Window> 

codice per l'evento Click:

private void BtnShowDialogStatus_Click(object sender, RoutedEventArgs e) 
{ 
    MessageBox.Show(new NewWindow().ShowDialog().ToString()); 
} 

E questa è la finestra di dialogo che sto aprendo l'evento click:

<Window x:Class="WpfApplicationWPF.NewWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="NewWindow" Height="300" Width="300"> 
    <StackPanel> 
     <Button Name="BtnDEfault" IsDefault="True" Click="BtnDEfault_Click">DEFAULT BUTTON</Button> 
     <Button Name="BtnCancel" IsCancel="True" Click="BtnCancel_Click">CANCEL BUTTON</Button> 
    </StackPanel> 
</Window> 

Questo è il codice per questo:

private void BtnDEfault_Click(object sender, RoutedEventArgs e) 
{ 
    this.Close(); 
} 

private void BtnCancel_Click(object sender, RoutedEventArgs e) 
{ 
    this.Close(); 
} 

Riesco a vederlo restituendo DialogResult solo come falso, indipendentemente dal fatto che faccia clic sul pulsante predefinito o su Annulla.

risposta

7

legami IsDefault il tasto per il tasto Invio, in modo che premendo il tasto Invio verrà generato l'evento Click. Ciò non significa che il pulsante Sì restituirà true per DialogResult.

Fare riferimento alla links.It sarà chiarire le cose per voi

http://blog.wpfwonderland.com/2010/03/22/getting-a-dialogresult-from-a-wpf-window/

http://www.wpftutorial.net/Dialogs.html

Speranza che aiuta ...

+0

Writer era sbagliato, credo. Gli manderò un feedback. –

+1

Primo link interrotto :( – juagicre

5

modificare il codice per

private void BtnDEfault_Click(object sender, RoutedEventArgs e) 
{ 
    DialogResult = true; 
    this.Close(); 
} 

private void BtnCancel_Click(object sender, RoutedEventArgs e) 
{ 
    DialogResult = false; 
    this.Close(); 
} 

speranza che questo aiuta

+0

Ciao, U non ha ancora letto words.He dell'autore dice che DialogResult viene automaticamente impostato. –

+0

L'ho provato solo ora, e il risultato della finestra di dialogo non viene automaticamente impostato per entrambi i pulsanti. Ciò che è strano, tuttavia, è che il pulsante impostato come IsDefault non chiude automaticamente la finestra quando viene fatto clic. Il pulsante impostato su IsCancel, tuttavia, FA. Qualcun altro vede questo comportamento strano? –

+1

Dovrei chiarirlo un po '. Se non si specifica alcun gestore (o non si specifica il valore DialogResult in entrambi i gestori), il pulsante con IsCancel set chiuderà comunque la finestra. Il pulsante impostato con IsDefault NON lo farà. Ma se imposti DialogResult in entrambi i gestori di eventi, la finestra si chiuderà (e non avrai nemmeno bisogno della riga this.Close()). Molto strano e molto incoerente. –

2

Per la mia comprensione impostazione IsDefault come vero e IsCancel come falso ti consente solo di assegnare quale evento dovrebbe accadere, cioè la finestra aprirà l'evento close sul tasto "Escape" per IsCancel e per il tasto Invio per IsD EFAULT = true.

È necessario impostare il risultato della finestra di dialogo dai gestori di azioni clic/comando del pulsante.

1

Utilizzando net 5 questo sembra essere tutto il codice necessario per aprire una finestra ShowDialog e chiuderla.

Dalla finestra che hai aperto.

<Button Margin="10" IsDefault="True" Click="Ok_OnClick" >OK</Button> 
    <Button Margin="10" IsCancel="True">Cancel</Button> 

    private void Ok_OnClick(object sender, RoutedEventArgs e) 
    { 
     DialogResult = true; 
    } 

Dalla funzione alla finestra aperta.

 var requester = new DeleteRequester();// a wpf window  
     var showDialog = requester.ShowDialog(); 
     if (showDialog != null && showDialog.Value) 

l'unico motivo che è controllato per nulla è quello di sbarazzarsi della linea nag blu da re-nitida.

Sembra che ogni volta che si modifica "DialogResult" La finestra si chiude e il valore viene restituito. Ha senso, perché cambieresti il ​​valore se non avessi fatto.

Con qualsiasi cosa tu stia facendo con la finestra, devi semplicemente chiudere la finestra per restituire un risultato falso, o impostare il DialogResult su true per chiudere la finestra con un risultato vero.

Semplice ed essenziale:

If(ItWorked){DialogResult = true;}// closes window returns true 

If(ItsJunk){Close();}// closes window returns false 
If(ItsJunk){DialogResult = false;}//closes window returns false