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

本文关键字:ElementHost 撤消 加载项 Outlook 文本 不允许 VSTO WPF | 更新日期: 2024-10-25 07:33:10

我有一个 Outlook 加载项 (VSTO),在 Outlook 窗体区域上,我在 ElementHost 中有一个 WPF 用户控件。 我有一个问题,即我的用户控件中的文本框没有撤消功能...在某些配置中。 特别是在Windows 7/Outlook 2007中撤消(即Ctrl-Z)不起作用,即使剪切/复制等都可以工作。 有趣的是,Windows 8/Outlook 2010撤消确实有效。

文本框 XAML 是:

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

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

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

更新 7 一月 2014. 我已将以下键绑定添加到文本框中:

<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 确实有效!

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

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

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

方法库...

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

文本框的当前句柄

IntPtr _handle

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

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

文本更改时

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