c# .net wpf outlook vsto

c# - WPF Textbox no permite deshacer cuando está alojado en ElementHost dentro de un complemento de VSTO/Outlook



.net (2)

Intente notificar a las ventanas que se ha cambiado el valor del control actual (cuadro de texto), tal vez en un evento modificado por texto como se muestra a continuación. (No lo intenté, pero apliqué a mi control en un escenario similar, donde los controles no pudieron identificar la modificación)

Biblioteca de métodos ............

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

// Controlador actual para textBox

IntPtr _handle

// Establece o borra el indicador de modificación para un control de edición. El indicador de modificación indica si el texto dentro del control de edición ha sido modificado. Puede enviar este mensaje a un control de edición o a un control de edición enriquecido.

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

// En el cambio de texto

SendMessageW(_handle, new IntPtr(SETMODIFY), IntPtr.Zero, IntPtr.Zero);

Tengo un complemento de Outlook (VSTO), en una región de formulario de Outlook tengo un control de usuario de WPF dentro de ElementHost. Tengo un problema que un TextBox dentro de mi control de usuario no tiene la capacidad de deshacer ... en algunas configuraciones. Específicamente en Windows 7 / Outlook 2007 deshacer (es decir, Ctrl-Z) no funciona, aunque cortar / copiar, etc., todos funcionan. Curiosamente, el deshacer de Windows 8 / Outlook 2010 funciona.

El TextBox XAML es:

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

Nota: He intentado configurar los siguientes atributos para que funcione, pero fue en vano: IsUndoEnabled = "True" UndoLimit = "- 1"

¿Alguien puede sugerir por qué sucede esto y qué puedo hacer para que funcione como se esperaba?

ACTUALIZACIÓN 7 de enero de 2014. He agregado los siguientes KeyBindings al cuadro de texto:

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

Y el resultado es - Cntl-Z / Cntrl-Y todavía no funciona, ¡ sin embargo Alt-G funciona!


Los complementos no pueden manejar atajos básicos de Excel. Probablemente debido a eso, los atajos no funcionan.