2010-12-27 8 views
6

czytam jedną książkę, która mówiDialogResult WPF

Zamiast ustawiania DialogResult ręcznie, gdy użytkownik kliknie przycisk można wyznaczyć przycisk jako przycisk akceptacji (poprzez ustawienie IsDefault do prawdziwe). Kliknięcie przycisku automatycznie ustawia okno dialogowe Okna dialogowego na wartość true. Podobnie można ustawić przycisk jako przycisk anulowania (ustawiając wartość IsCancel na true), w takim przypadku kliknięcie spowoduje ustawienie opcji Anuluj w oknie dialogowym DialogResult .

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

Kod click imprezy:

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

i to jest pole dialogowe, które ja otwarcie na razie kliknij:

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

To jest kod:

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

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

Widzę, że zwracanie okna dialogowego jest tylko fałszywe, niezależnie od tego, czy kliknę przycisk domyślny, czy przycisk anulowania.

Odpowiedz

7

IsDefault więzi przycisk do klawisza Enter, tak że naciskając klawisz Enter będzie ognia zdarzenie kliknięcia. To nie znaczy, że przycisk Tak zwróci wartość true dla DialogResult.

Patrz links.It wyjaśni rzeczy dla ciebie

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

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

Nadzieja to pomaga ...

+0

Pisarz pomylił się, myślę. Wyślij mu opinię. –

+1

Pierwszy link jest uszkodzony :( – juagicre

5

zmiany kodu do

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

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

nadziei, że to pomoże

+0

Cześć, u nie czytać words.He autora mówi, że DialogResult zostaje automatycznie ustawiony. –

+0

Przetestowałem to właśnie teraz, a wynik okna dialogowego nie jest automatycznie ustawiany dla żadnego z przycisków. Dziwne jest jednak to, że przycisk ustawiony jako IsDefault nie zamyka automatycznie okna po kliknięciu. Jednak przycisk ustawiony jako IsAnusty powoduje. Ktoś jeszcze widział to dziwne zachowanie? –

+1

Powinienem to trochę wyjaśnić. Jeśli nie określisz żadnych procedur obsługi (lub nie określisz wartości DialogResult w żadnej procedurze obsługi), przycisk z ustawieniem IsCancel nadal zamknie okno. Przycisk ustawiony za pomocą IsDefault NIE będzie. Ale jeśli ustawisz DialogResult w obu procedurach obsługi zdarzeń, Okno zamknie się (i nawet nie potrzebujesz tej linii.Close()). Bardzo dziwne i bardzo niespójne. –

2

mojego rozeznania ustawienie IsDefault jako prawdziwe i IsCancel jako false pozwala tylko przypisać, które zdarzenie ma nastąpić, np. Okno uruchomi zdarzenie close przy klawiszu "Escape" dla IsCancel i dla klawisza Enter dla IsD efault = true.

Konieczne będzie ustawienie wyniku dialogu za pomocą przycisków obsługi akcji/komend.

1

Korzystanie z sieci 5 wydaje się być całym kodem potrzebnym do otwarcia okna ShowDialog i zamknięcia go.

Z okna, które otworzyłeś.

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

Od funkcji do otwarcia okna.

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

Jedynym powodem, dla którego jest zaznaczona wartość null, jest pozbycie się niebieskiej linii nag z ponownego ostrzenia.

Wydaje się, że po zmianie "DialogResult" okno zostanie zamknięte, a wartość zostanie zwrócona. W pewnym sensie, dlaczego miałbyś zmienić wartość, gdybyś nie zrobił tego.

Przy każdym działaniu z oknem wystarczy zamknąć okno, aby zwrócić fałszywy wynik, lub ustawić wartość DialogResult na wartość true, aby zamknąć okno z wynikiem true.

prosty i podstawowy:

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

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