2013-12-18 12 views
17

Tôi có một addin Outlook (VSTO), trên vùng biểu mẫu Outlook, tôi có quyền kiểm soát người dùng WPF trong một ElementHost. Tôi có một vấn đề là một TextBox trong điều khiển người dùng của tôi không có khả năng hoàn tác ... trong một số cấu hình. Cụ thể trong Windows 7/Outlook 2007 hoàn tác (tức là Ctrl-Z) không hoạt động, mặc dù Cắt/Sao chép vv tất cả đều hoạt động. Điều thú vị là Windows 8/Outlook 2010 hoàn tác không hoạt động.Hộp văn bản WPF không cho phép Hoàn tác khi được lưu trữ trong một phần tử trong một bổ trợ VSTO/Outlook

Các TextBox XAML là:

<TextBox 
    Name="txtnote" 
    VerticalScrollBarVisibility="Auto" 
    SpellCheck.IsEnabled="True" 
    Text="Topic notes..." 
    TextWrapping="Wrap" 
    AcceptsReturn="True" /> 

Lưu ý: Tôi đã cố gắng thiết lập các thuộc tính sau đây để làm cho nó hoạt động nhưng không có kết quả: IsUndoEnabled = "True" UndoLimit = "- 1"

Can bất cứ ai đề nghị tại sao điều này xảy ra và những gì tôi có thể làm để làm cho nó hoạt động như mong đợi?

CẬP NHẬT 07 Tháng Một 2014. Tôi đã thêm Keybindings sau vào hộp văn bản:

<TextBox.InputBindings> 
    <KeyBinding Command="ApplicationCommands.Undo" Key="Z" Modifiers="Control" /> 
    <KeyBinding Command="ApplicationCommands.Redo" Key="Y" Modifiers="Control" /> 
    <KeyBinding Command="ApplicationCommands.Undo" Key="G" Modifiers="Alt" /> 
</TextBox.InputBindings> 

Và kết quả là - Ctrl-Z/Cntrl-Y vẫn không hoạt động, tuy nhiên Alt- G không hoạt động!

+0

Thats lẻ, một cái gì đó trong hệ thống ống nước phải thay đổi. * Excel chặn tất cả các đầu vào bàn phím từ các cửa sổ con không phải Excel trong quá trình của nó. * Sự tò mò không hoàn tác sau khi dán công việc lập trình? 'Clipboard.SetText (" Hoàn tác tôi "); TextBox.Paste(); ' –

+0

Hi Jeremy - cảm ơn vì điều đó. Không, hoàn tác (tức là nhấn Cntl-Z) sau khi dán chương trình không hoạt động. Tuy nhiên tôi cũng đã cố gắng thực hiện hoàn tác từ ngăn xếp hoàn tác và điều đó không hoạt động. tức là: if (txtnote.CanUndo == true) {txtnote.Undo();} else {MessageBox.Show ("Can't Undo");} – Marcin

+1

Sp có vẻ như Control-Z/Control-Y đang bị tấn công một vài nơi. – Marcin

Trả lời

1

Plugin không được phép xử lý các phím tắt Excel lõi. Có thể do đó, các phím tắt không hoạt động.

0

Hãy thử thông báo cho cửa sổ rằng giá trị của hộp kiểm (giá trị hộp văn bản) hiện tại đã được thay đổi, có thể trên sự kiện thay đổi văn bản như dưới đây. (Không thử nó, nhưng đã áp dụng để kiểm soát của tôi trong một kịch bản tương tự, nơi các điều khiển đã không thể xác định việc sửa đổi)

thư viện Phương pháp ............

[DllImport("user32.dll", EntryPoint = "SendMessageW", SetLastError = true)] 
public static extern IntPtr SendMessageW([InAttribute] IntPtr hWnd, IntPtr msg, IntPtr wParam, IntPtr lParam); 

// xử lý hiện tại cho TextBox

IntPtr _handle 

// Sets hoặc xóa cờ sửa đổi cho một điều khiển chỉnh sửa. Cờ sửa đổi cho biết liệu văn bản trong điều khiển chỉnh sửa đã được sửa đổi chưa. Bạn có thể gửi thư này cho một điều khiển chỉnh sửa hoặc một điều khiển chỉnh sửa phong phú.

int SETMODIFY = 185,//0x00B9 (constant) 

// On thay đổi văn bản

SendMessageW(_handle, new IntPtr(SETMODIFY), IntPtr.Zero, IntPtr.Zero); 
Các vấn đề liên quan