2011-10-27 16 views
6

Hộp văn bản WPF chụp Ctrl-Z và Ctrl-Y để hoàn tác/hoàn tác lại. Thông thường tuyệt vời, nhưng trong ứng dụng của chúng tôi, chúng tôi có một số hộp văn bản mà tôi không muốn có hành vi này, nhưng thay vào đó chuyển sang ứng dụng tổng thể để xử lý dưới dạng hoàn tác toàn cầu.Làm thế nào để làm cho một TextBox thông qua WPF ApplicationCommands?

Tôi đã tìm ra rằng tôi có thể ghi đè lên việc xử lý các hộp văn bản này bằng cách thêm CommandBindings cho ApplicationCommands.Undo/Redo.

Câu hỏi của tôi: làm cách nào tôi có thể 'chuyển tiếp' các liên kết đó đến phần tử khung chính để cuối cùng nó chuyển đến trình xử lý ứng dụng tôi đã cài đặt trên cửa sổ chính?

Cập nhật: Nhờ AndrewS hóa ra tất cả những gì tôi cần là đặt IsUndoEnabled thành false. Sau đó, các lệnh ứng dụng bị bỏ qua và cửa sổ cấp cao nhất có thể xử lý chúng. Yay!

Trả lời

10

Bạn phải đăng ký KeyBinding cho phím tắt và liên kết nó với ApplicationCommands.NotACommand. ví dụ.

<TextBox> 
     <TextBox.InputBindings> 
      <KeyBinding Key="Y" Modifiers="Control" Command="NotACommand" /> 
      <KeyBinding Key="Z" Modifiers="Control" Command="NotACommand" /> 
     </TextBox.InputBindings> 
    </TextBox> 
+0

BTW bạn cũng có thể muốn đặt IsUndoEnabled thành false để không lãng phí bộ nhớ quản lý lịch sử hoàn tác của nó. – AndrewS

+0

Rất thú vị. Thậm chí không biết NotACommand tồn tại .. Trong tò mò làm thế nào điều này sẽ được thực hiện bản địa? (Tôi cho rằng bàn phím tiếng Trung không sử dụng Ctrl + Z để hoàn tác.) – scobi

+0

Tôi không biết cách nào tốt để có được điều đó. Nếu bạn nhìn vào phương thức System.Windows.Input.ApplicationCommands.LoadDefaultGestureFromResource (ví dụ: trong phản xạ/uispy), chúng sẽ nhận được khóa từ tài nguyên của chính chúng nhưng tôi không biết rằng chúng xuất hiện. Bạn có lẽ sẽ cần phải lấy InputGestures của ApplicationCommand. (Hoàn tác | Làm lại) và sau đó tự động thêm InputBindings. Bạn có thể làm điều đó trong hành vi của riêng bạn. – AndrewS

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