2010-12-27 23 views
6

Tôi đang đọc một cuốn sách mà nóiDialogResult WPF

Thay vì thiết lập DialogResult bằng tay sau khi người dùng nhấp vào một nút , bạn có thể chỉ định một nút như nút chấp nhận (bằng cách thiết lập IsDefault để thật). Nhấp vào nút này sẽ tự động đặt hộp thoại DialogResult của cửa sổ thành true. Tương tự, bạn có thể chỉ định một nút làm nút hủy (bằng cách đặt IsCancel thành true), trong trường hợp này nhấp vào nó sẽ đặt DialogResult thành Hủy.

Đây là 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> 

Mã cho nhấp chuột sự kiện:

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

Và đây là hộp Dialog mà tôi đang mở trên các sự kiện nhấp chuột:

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

Đây là mã cho nó:

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

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

Tôi có thể thấy nó trả về DialogResult chỉ là sai bất kể tôi nhấp vào nút mặc định hoặc hủy.

Trả lời

7

quan hệ IsDefault nút để phím Enter, do đó nhấn phím Enter sẽ cháy sự kiện Click. Nó không có nghĩa là nút Yes sẽ trả về true cho DialogResult.

Tham khảo links.It sẽ làm sáng tỏ mọi thứ cho bạn

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

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

Hy vọng nó sẽ giúp ...

+0

Nhà văn sai Tôi đoán. Sẽ gửi cho anh ấy một phản hồi. –

+1

Liên kết đầu tiên bị hỏng :( – juagicre

5

thay đổi mã của bạn để

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

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

hy vọng điều này giúp

+0

Hi, U didnt đọc words.He của tác giả nói rằng DialogResult sẽ tự động được thiết lập. –

+0

Tôi đã thử nghiệm tính năng này ngay bây giờ và kết quả của hộp thoại không tự động được đặt cho một trong hai nút. Điều lạ lùng, tuy nhiên, là nút được thiết lập là IsDefault không tự động đóng cửa sổ khi được nhấp. Tuy nhiên, nút được đặt là IsCancel, DOES. Có ai khác nhìn thấy hành vi kỳ quặc này không? –

+1

Tôi nên làm rõ một chút. Nếu bạn không chỉ định bất kỳ trình xử lý nào (hoặc không chỉ định giá trị DialogResult trong cả hai trình xử lý), thì nút có bộ IsCancel sẽ vẫn đóng cửa sổ. Nút được thiết lập với IsDefault sẽ KHÔNG. Nhưng nếu bạn đặt DialogResult trong cả hai trình xử lý sự kiện, thì cửa sổ sẽ đóng lại (và bạn thậm chí không cần dòng this.Close()). Rất lạ và rất không nhất quán. –

2

Để hiểu biết của tôi thiết IsDefault là đúng và IsCancel là false chỉ cho phép bạn chỉ định sự kiện nào sẽ xảy ra tức là cửa sổ sẽ kích hoạt sự kiện đóng trên phím 'Escape' cho IsCancel và cho phím Enter cho IsD efault = true.

Bạn sẽ cần đặt kết quả Dialog từ nút bấm của bạn/xử lý hành động lệnh.

1

Sử dụng net 5 đây dường như là tất cả mã cần thiết để mở cửa sổ ShowDialog và đóng cửa sổ đó.

Từ cửa sổ bạn đã mở.

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

Từ chức năng đến cửa sổ mở.

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

lý do duy nhất nó được kiểm tra cho null là để thoát khỏi dòng nag xanh từ lại sắc nét hơn.

Dường như bất cứ khi nào bạn thay đổi "DialogResult" Cửa sổ sẽ đóng lại và giá trị được trả lại. Loại có ý nghĩa, tại sao bạn sẽ thay đổi giá trị nếu bạn không làm.

Với những gì bạn làm với cửa sổ, bạn chỉ cần đóng cửa sổ để trả lại kết quả sai hoặc đặt DialogResult thành true để đóng cửa sổ với kết quả thực.

đơn giản và cơ bản:

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

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