2011-06-23 29 views

Trả lời

26

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

Vì vậy, ứng dụng này giống với Ứng dụng biểu mẫu Windows? –

+0

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

4

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

Các vấn đề liên quan