2013-12-18 25 views
17

Mam dodatek programu Outlook (VSTO), w regionie formularza programu Outlook Mam formant użytkownika WPF w ramach ElementHost. Mam problem, że TextBox w mojej kontroli użytkownika nie ma możliwości cofania ... w niektórych konfiguracjach. W szczególności w Windows 7/Outlook 2007 cofanie (np. Ctrl-Z) nie działa, nawet jeśli Cut/Copy itd. Wszystkie działają. Co ciekawe, cofanie Windows 8/Outlook 2010 działa.Pole tekstowe WPF, które nie pozwala na Cofanie podczas hostowania w ElementHost w dodatku VSTO/Outlook

TextBox XAML jest:

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

Uwaga: Próbowałem ustawienie następujące atrybuty, aby to działało ale bezskutecznie: IsUndoEnabled = "True" UndoLimit = "- 1"

Can ktoś sugeruje, dlaczego tak się dzieje i co mogę zrobić, aby działało zgodnie z oczekiwaniami?

UPDATE 07 stycznia 2014 r Dodałem następujące skróty klawiszowe do pola tekstowego:

<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> 

a wynik jest - Cntl-Z/cntrl Y nadal nie działa, jednak Alt G działa!

+0

Ów dziwny, coś w kanalizacji musi się zmienić. * Excel przechwytuje wszystkie wejścia klawiatury z okien potomnych innych niż Excel w swoim procesie. * Z ciekawości robi się cofanie po programowym wklejeniu pracy? 'Clipboard.SetText (" Cofnij mnie "); TextBox.Paste(); ' –

+0

Cześć Jeremy - dzięki za to. Nie, cofanie (to jest wciśnięcie Cntl-Z) po tym, jak programistyczna pasta nie działa. Jednak próbowałem również wykonać cofanie ze stosu cofania, a to działa. tj: if (txtnote.CanUndo == true) {txtnote.Undo();} else {MessageBox.Show ("Can not Undo");} – Marcin

+1

Wygląda na to, że Control-Z/Control-Y został przejęty gdzieś. – Marcin

Odpowiedz

1

Wtyczki nie mogą obsługiwać podstawowych skrótów programu Excel. Prawdopodobnie z tego powodu skróty nie działają.

0

Spróbuj podać okna, w których została zmieniona wartość bieżącej kontrolki (pole tekstowe), być może w przypadku zdarzenia zmienionego tekstem, jak poniżej. (Nie próbowałem, ale nie stosuje się do mojego kontroli w podobnej sytuacji, gdzie kontrole nie był w stanie zidentyfikować modyfikacji)

Method bibliotekę ............

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

// Aktualny uchwyt tekstowym

IntPtr _handle 

// Ustawia lub usuwa flagę modyfikacji dla kontroli edycji. Flaga modyfikacji wskazuje, czy tekst w edytorze edycji został zmodyfikowany. Możesz wysłać tę wiadomość do formantu edycji lub formantu edycji rozszerzonej.

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

// Na zmianę tekstu

SendMessageW(_handle, new IntPtr(SETMODIFY), IntPtr.Zero, IntPtr.Zero); 
Powiązane problemy