Tôi biết cách thực hiện việc này trên Ứng dụng Biểu mẫu Windows, nhưng tôi không thể tìm thấy cách nào để thực hiện trên Ứng dụng WPF. Làm cách nào để trình bày cho người dùng Hộp thoại chặn với tùy chọn Có/Không và nhận/xử lý phản hồi từ người dùng?Cách tạo Hộp thoại để nhắc người dùng có tùy chọn Có/Không trong WPF
Trả lời
Dưới đây là an example:
string sMessageBoxText = "Do you want to continue?";
string sCaption = "My Test Application";
MessageBoxButton btnMessageBox = MessageBoxButton.YesNoCancel;
MessageBoxImage icnMessageBox = MessageBoxImage.Warning;
MessageBoxResult rsltMessageBox = MessageBox.Show(sMessageBoxText, sCaption, btnMessageBox, icnMessageBox);
switch (rsltMessageBox)
{
case MessageBoxResult.Yes:
/* ... */
break;
case MessageBoxResult.No:
/* ... */
break;
case MessageBoxResult.Cancel:
/* ... */
break;
}
Xin lưu ý rằng trong khi Radu của câu trả lời làm việc, bạn không thể áp dụng kiểu WPF để MessageBox.
Tôi đã thực hiện một cách tiếp cận khác cho vấn đề này.
Tôi đã tạo một lớp để dùng làm Mô hình xem cho cửa sổ thư của mình và tôi đã tạo kiểu cho cách tôi muốn cửa sổ của mình xuất hiện. Sau đó trong mã tôi đã khởi tạo một cửa sổ mới, thiết lập nó là DataContext thành một thể hiện của View Model của tôi, và thiết lập thuộc tính Style của Window theo kiểu mà tôi đã tạo cho cửa sổ.
Tôi biết điều đó nghe có vẻ hơi quá mức và tôi không chắc người khác giải quyết vấn đề này như thế nào ... nhưng giải pháp của tôi khá linh hoạt và tôi bắt đầu thực sự thích nó.
Ví dụ, đây là Dialog Xem mẫu:
Public Class MyDialogViewModel
Public Event Closed()
Public Property Message As String
Public Property Cancel As MyNamespace.RelayCommand
Public Property Close As MyNamespace.RelayCommand
Public Property WasCancelled As Boolean
Public Sub New()
WasCancelled = True
Cancel = New MyNamespace.RelayCommand(AddressOf CancelClicked)
Close = New MyNamespace.RelayCommand(AddressOf CloseClicked)
End Sub
Private Sub CancelClicked()
RaiseEvent Closed()
End Sub
Private Sub CloseClicked()
WasCancelled = False
RaiseEvent Closed()
End Sub
End Class
Đây là phong cách của tôi cho một cửa sổ "thông báo" cơ bản:
<Style x:Key="myMessageStyle" TargetType="{x:Type myNameSpace:CustomDialogWindow}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ControlTemplate.Resources>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="25"/>
</Style>
</ControlTemplate.Resources>
<Border >
<DockPanel Margin="10,10,0,10">
<TextBlock Text="{Binding Message}" Width="Auto" TextWrapping="WrapWithOverflow" DockPanel.Dock="Top"
Margin="10"
Foreground="{StaticResource MyMessageBoxForegroundColor}"/>
<DockPanel Margin="5,0,0,0" DockPanel.Dock="Bottom">
<Button Content="Ok" Command="{Binding Close}" ></Button>
<Button Content="Cancel" Command="{Binding Cancel}" HorizontalAlignment="Stretch"></Button>
</DockPanel>
</DockPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
CustomDialogWindow tôi chỉ đơn giản là một cửa sổ với không có gì trong đó:
(XAML)
<Window x:Class="CustomDialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CustomDialogWindow"
SizeToContent="WidthAndHeight">
</Window>
Và trong CustomDialogWindow Tôi có đoạn code sau đây để các cửa sổ đóng khi người dùng nhấp hủy bỏ hoặc ok:
Public Class CustomDialogWindow
Private Sub CustomDialogWindow_DataContextChanged(ByVal sender As Object, ByVal e As System.Windows.DependencyPropertyChangedEventArgs) Handles Me.DataContextChanged
Dim dContext As MyDialogViewModel= TryCast(DataContext, MyDialogViewModel)
If dContext IsNot Nothing Then
AddHandler DirectCast(DataContext, MyDialogViewModel).CloseWindow, AddressOf CloseWindow
End If
End Sub
Private Sub CloseWindow()
Me.Close()
End Sub
End Class
Bây giờ khi tôi cần phải sử dụng cửa sổ tôi chỉ cần nhanh chóng một CustomDialogWindow mới, thiết lập nó DataContext để một trường hợp mới của lớp DialogViewModel, và đặt nó là phong cách cho "myMessageStyle":
Dim cdw As New CustomDialogWindow
Dim dvm As New DialogViewModel
dvm.Message = "Hello World!"
cdw.DataContext = dvm
cdw.ShowDialog()
If dvm.WasCancelled = False Then
'....'
End If
lý do tại sao tôi thích phương pháp này là vì tôi kế thừa từ MyDialogViewModel và cung cấp thêm các thuộc tính do đó, ví dụ, tôi có thể hiển thị một loạt các tùy chọn để người dùng lựa chọn. Tôi chỉ cung cấp các kiểu tùy chỉnh cho từng loại cửa sổ mà tôi muốn hiển thị (đảm bảo ràng buộc các thuộc tính thích hợp). Như tôi đã nói, nó rất linh hoạt và khá đơn giản để thực hiện.
Chúc mừng!
-Finny
- 1. Buộc người dùng chọn tùy chọn trong hộp thoại
- 2. Java - Cách tạo hộp thoại tùy chỉnh?
- 3. Cách chọn nút mặc định trong hộp thoại wpf?
- 4. Hộp thoại nhắc trong WSH bằng JScript?
- 5. Hộp thoại giao diện người dùng jQuery - cách làm cho hộp thoại không đóng được?
- 6. Hộp thoại giao diện người dùng jQuery: cách đóng hộp thoại khi nhấp vào bên ngoài?
- 7. Tôi cần có hộp thoại tùy chỉnh trong Tuỳ chọn
- 8. Tại sao giao diện người dùng jQuery 1.10 xóa tùy chọn hộp thoại jquery zIndex?
- 9. Làm cách nào để tôi có thể gọi hộp thoại để đặt tùy chọn máy in theo cách thủ công?
- 10. Hộp thoại Giao diện người dùng JQuery: các tùy chọn toàn ứng dụng
- 11. Tạo hộp thoại tùy chỉnh trong Android
- 12. Hộp thoại bộ chọn tùy chỉnh
- 13. Trả về giá trị tùy chỉnh từ hộp thoại WPF
- 14. Hộp thoại nút giao diện người dùng jQuery
- 15. Làm cách nào để tạo Hộp thoại tùy chỉnh 100%
- 16. Đầu vào của người dùng trong một hộp thoại MessageDialog
- 17. Hộp thoại bộ chọn tệp trong WPF ở đâu?
- 18. cách thay đổi giao diện người dùng tùy thuộc vào lựa chọn hộp kết hợp
- 19. Tạo một div lồng nhau trong hộp thoại Giao diện người dùng jQuery thay đổi kích thước bằng hộp thoại?
- 20. Mở hộp thoại trong WPF MVVM
- 21. Làm cách nào để thay đổi tùy chọn Có/Không trong hộp thoại xác nhận?
- 22. Có cách nào để tạo hộp thoại chọn tệp java nhớ thư mục cuối cùng không?
- 23. Hộp thoại giao diện người dùng JQuery chậm
- 24. Làm cách nào để nhận tùy chọn "Thuộc tính trang" trong hộp thoại in Cocoa?
- 25. Giao diện người dùng jQuery Hộp thoại CSS cá nhân
- 26. Hộp thoại xử lý lỗi tùy chỉnh WPF?
- 27. Làm cách nào để đọc lối tắt bàn phím tùy chỉnh từ người dùng trong WPF?
- 28. Tùy chỉnh hộp thoại onbeforeunload
- 29. WPF - Ràng buộc để chọn sửa hộp danh sách giữa các điều khiển của người dùng
- 30. Giao diện người dùng JQuery thêm id vào hộp thoại
Vì vậy, ứng dụng này giống với Ứng dụng biểu mẫu Windows? –
Bạn sẽ cần sử dụng 'System.Windows.MessageBox'. [Đây là tài liệu cho 'MessageBox.Show'] (http://msdn.microsoft.com/en-us/library/ms598703.aspx) trong ví dụ, một phần của assembly PresentationFramework. – rid