WPF文本框在VSTO / Outlook加载项中的ElementHost中托管时不允许撤消

时间:2013-12-18 11:48:23

标签: c# .net wpf outlook vsto

我有一个Outlook插件(VSTO),在Outlook表单区域我在ElementHost中有一个WPF用户控件。我有一个问题,即我的用户控件中的TextBox没有撤销功能......在某些配置中。特别是在Windows 7 / Outlook 2007中,撤消(即Ctrl-Z)不起作用,即使剪切/复制等都可以正常工作。有趣的是,Windows 8 / Outlook 2010撤消确实有效。

TextBox XAML是:

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

注意:我尝试设置以下属性以使其工作但无济于事:IsUndoEnabled =“True”UndoLimit =“ - 1”

任何人都可以建议为什么会发生这种情况以及我能做些什么来使其按预期工作?

更新2014年1月7日。我在文本框中添加了以下KeyBinding:

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

结果是 - Cntl-Z / Cntrl-Y仍然不起作用,但是Alt-G确实有效!

2 个答案:

答案 0 :(得分:1)

不允许插件处理核心Excel快捷方式。可能由于这个原因,快捷方式无效。

答案 1 :(得分:0)

尝试通知窗口当前控件的(文本框)值已更改,可能在文本更改事件上,如下所示。 (没试过,但是在类似情况下应用了我的控件,控件无法识别修改)

方法库............

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

// textBox的当前句柄

IntPtr _handle

//设置或清除编辑控件的修改标志。修改标志指示编辑控件内的文本是否已被修改。您可以将此消息发送到编辑控件或富编辑控件。

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

//关于文字更改

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