2009-08-17 19 views
17

Tôi đang tạo một menu chuẩn trong ứng dụng WPF của mình.Lệnh chuẩn của WPF - Lối ra của đâu?

Tôi biết rằng tôi có thể tạo các lệnh tùy chỉnh, nhưng tôi biết cũng có một loạt lệnh chuẩn để liên kết.

Ví dụ: để mở tệp, tôi phải liên kết với ApplicationCommands.Open, để đóng tệp tôi nên liên kết với ApplicationCommands.Close. Ngoài ra còn có một số lượng lớn EditCommands, ComponentCommands hoặc NavigationCommands.

Dường như không có lệnh "Thoát". Tôi đã dự kiến ​​sẽ có ApplicationCommands.Exit.

Tôi nên liên kết gì với mục menu "Thoát"? Để tạo ra một lệnh tùy chỉnh cho một cái gì đó chung chung này chỉ có vẻ sai.

Trả lời

4

AFAIK không có ApplicationCommands.Quit hoặc ApplicationCommands.Exit, vì vậy tôi đoán bạn đang gonna phải tạo nó cho mình ...

Dù sao, nếu bạn đang sử dụng MVVM pattern, RoutedCommands không chính xác tiện dụng, do đó, tốt hơn nên sử dụng phương án thay thế nhẹ như RelayCommand hoặc DelegateCommand.

0

Bạn có thể sửa đổi thuộc tính Văn bản của lệnh trước khi bạn liên kết nó trong cửa sổ. Điều này sẽ thay đổi văn bản lệnh ở mọi nơi xuất hiện trong ui của bạn.

EDIT: Làm điều này để Close trong cửa sổ hoặc App ctor

8

Thật không may, không có ApplicationCommands.Exit được xác định trước. Thêm một vào WPF đã được đề xuất trên Microsoft Connect trong năm 2008: http://connect.microsoft.com/VisualStudio/feedback/details/354300/add-predefined-wpf-command-applicationcommands-exit. Tuy nhiên, mặt hàng đó đã được đánh dấu là đóng/hoãn lại.

Mike Taulty đã thảo luận cách create your own Exit command trong một bài viết trên blog của anh ấy.

6

Không thực sự phức tạp (nhưng vẫn còn, M $ không cho việc không cung cấp). Ở đây bạn đi:

public static class MyCommands 
{ 
    private static readonly ICommand appCloseCmd = new ApplicationCloseCommand(); 
    public static ICommand ApplicationCloseCommand 
    { 
     get { return appCloseCmd; } 
    } 
} 

//=================================================================================================== 
public class ApplicationCloseCommand : ICommand 
{ 
    public event EventHandler CanExecuteChanged 
    { 
     // You may not need a body here at all... 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

    public bool CanExecute(object parameter) 
    { 
     return Application.Current != null && Application.Current.MainWindow != null; 
    } 

    public void Execute(object parameter) 
    { 
     Application.Current.MainWindow.Close(); 
    } 
} 

Và không thể cần đến bộ xử lý sự kiện AplicationCloseCommand.CanExecuteChanged.

Bạn sử dụng nó như vậy:

<MenuItem Header="{DynamicResource MenuFileExit}" Command="MyNamespace:MyCommands.ApplicationCloseCommand"/> 

Cheers!

(Bạn không thể tưởng tượng được bao lâu nó đưa tôi đến khám phá này thứ chỉ huy bản thân mình ...)

0
private void MenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     Application.Current.Shutdown(); 
    } 
+0

Nó sẽ được ưa thích nếu bạn thêm một lời giải thích cho mã của bạn ... – JTG

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