2013-12-18 12 views
17

Ich habe ein Outlook-Add-In (VSTO), auf einem Outlook-Formularbereich habe ich ein WPF-Benutzersteuerelement in einem ElementHost. Ich habe ein Problem, dass eine TextBox in meinem Benutzersteuerelement nicht die Rückgängig-Funktion ... in einigen Konfigurationen hat. Insbesondere in Windows 7/Outlook 2007 funktioniert das Rückgängigmachen (dh Strg-Z) nicht, obwohl Cut/Copy usw. alle funktionieren. Interessanterweise funktioniert Windows 8/Outlook 2010 rückgängig.WPF-Textfeld, das Rückgängig macht, wenn gehostet in einem ElementHost innerhalb eines VSTO/Outlook-Add-Ins

Die TextBox XAML ist:

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

Hinweis: Ich habe versucht, die folgenden Attribute einstellen, damit es funktioniert, aber ohne Erfolg: IsUndoEnabled = "True" UndoLimit = "- 1"

Can jemand schlägt vor, warum dies geschieht und was ich tun kann, damit es wie erwartet funktioniert?

UPDATE 7. Januar 2014 Ich habe folgende KeyBindings das Textfeld hinzugefügt:

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

Und das Ergebnis ist - Cntl-Z/Strg-Y immer noch nicht funktioniert, jedoch Alt- G funktioniert!

+0

Das ist seltsam, etwas in der Sanitär muss geändert haben. * Excel fängt alle Tastatureingaben von Nicht-Excel-Unterfenstern in seinem Prozess ab. * Aus Neugier wird das Rückgängigmachen nach dem programmatischen Einfügen von Arbeit rückgängig gemacht? 'Clipboard.SetText (" Rückgängig machen "); TextBox.Paste(); ' –

+0

Hallo Jeremy - danke dafür. Nein, das Rückgängigmachen (dh Drücken von Cntl-Z) nach einem programmatischen Einfügen funktioniert nicht. Ich habe aber auch versucht, den Undo-Stack rückgängig zu machen, und das funktioniert. zB: if (txtnote.CanUndo == true) {txtnote.Undo();} else {MessageBox.Show ("Kann nicht rückgängig machen");} – Marcin

+1

Sp scheint das Control-Z/Control-Y entführt zu werden irgendwo. – Marcin

Antwort

1

Plugins dürfen keine Kern-Excel-Verknüpfungen verarbeiten. Wahrscheinlich funktionieren Shortcuts nicht.

0

Versuchen Sie, die Fenster zu melden, in denen der Wert des aktuellen Steuerelements (Textbox) geändert wurde, möglicherweise bei Ereignissen mit Textänderung wie unten. (Es nicht versucht, war aber in einem ähnlichen Szenario zu meiner Kontrolle angewendet, wo die Kontrollen nicht in der Lage war, die Änderung zu identifizieren)

Methode Bibliothek ............

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

// Aktuelle Griff für textBox

IntPtr _handle 

// Setzt oder löscht die Änderung Kennzeichen für ein edit-Control. Das Änderungskennzeichen gibt an, ob der Text im Bearbeitungssteuerelement geändert wurde. Sie können diese Nachricht entweder an ein Bearbeitungssteuerelement oder ein Rich-Edit-Steuerelement senden.

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

// Auf Textänderung

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