2013-12-18 18 views
17

Ho un add-in di Outlook (VSTO), in un'area di modulo di Outlook Ho un controllo utente WPF all'interno di ElementHost. Ho un problema che un controllo TextBox nel mio controllo utente non ha la possibilità di annullare ... in alcune configurazioni. Nello specifico, in Windows 7/Outlook 2007, l'annullamento (ad esempio Ctrl-Z) non funziona, anche se tutto il lavoro di copia/copia ecc. È interessante notare che l'annullamento di Windows 8/Outlook 2010 funziona.Casella di testo WPF che non consente l'annullamento quando ospitato in un ElementHost all'interno di un componente aggiuntivo VSTO/Outlook

Il TextBox XAML è:

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

Nota: Ho provato a fissare i seguenti attributi per farlo funzionare, ma senza alcun risultato: IsUndoEnabled = "True" UndoLimit = "- 1"

può qualcuno suggerisce perché questo sta accadendo e cosa posso fare per farlo funzionare come previsto?

UPDATE 7 gennaio 2014. ho aggiunto le seguenti KeyBindings alla casella di testo:

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

E il risultato è - Cntl-Z/Cntrl-Y continua a non funzionare, tuttavia Alt- G funziona!

+0

Questo è strano, qualcosa nell'impianto idraulico deve essere cambiato. * Excel intercetta tutti gli input da tastiera di finestre secondarie non di Excel nel suo processo. * Per curiosità si annulla dopo aver incollato il lavoro programmaticamente? 'Clipboard.SetText (" Undo me "); TextBox.Paste(); ' –

+0

Ciao Jeremy - grazie per quello. No, annullare (cioè premere Cntl-Z) dopo una pasta programmatica non funziona. Tuttavia ho anche provato a fare l'annullamento dallo stack di annullamento, e questo funziona. es .: if (txtnote.CanUndo == true) {txtnote.Undo();} else {MessageBox.Show ("Can not Undo");} – Marcin

+1

Sp sembra che Control-Z/Control-Y sia stato dirottato da qualche parte. – Marcin

risposta

1

I plug-in non sono autorizzati a gestire le scorciatoie principali di Excel. Probabilmente a causa di ciò, le scorciatoie non funzionano.

0

Provare a notificare alla finestra che il valore del controllo corrente (casella di testo) è stato modificato, magari su evento modificato dal testo come indicato di seguito. (Non provato, ma aveva applicato a mio controllo in uno scenario simile, in cui i controlli non è stato in grado di identificare la modifica)

biblioteca Metodo ............

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

// handle attuale textBox

IntPtr _handle 

// Imposta o cancella il flag di modifica per un controllo di modifica. Il flag di modifica indica se il testo all'interno del controllo di modifica è stato modificato. Puoi inviare questo messaggio a un controllo di modifica o a un controllo di modifica avanzata.

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

// Il cambiamento testo

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