private void keyDownTasker(object eventObj) { if (MessageInput.Document.CheckAccess()) { KeyEventArgs e = eventObj as KeyEventArgs; switch (e.Key) { case Key.Up: MessageInput.Document.Blocks.Clear(); if (_messageSendedIndex < _messageSended.Count) { _messageSendedIndex++; MessageInput.Document.Blocks.AddRange(LoadXaml(_messageSended[_messageSended.Count - _messageSendedIndex].ToString()).Blocks.ToList()); MessageInput.Selection.Select(MessageInput.Document.ContentEnd, MessageInput.Document.ContentEnd); } break; case Key.Down: MessageInput.Document.Blocks.Clear(); if (_messageSendedIndex > 1) { _messageSendedIndex--; MessageInput.Document.Blocks.AddRange(LoadXaml(_messageSended[_messageSended.Count - _messageSendedIndex].ToString()).Blocks.ToList()); MessageInput.Selection.Select(MessageInput.Document.ContentEnd, MessageInput.Document.ContentEnd); } break; } if ((e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) && e.Key == Key.A) { MessageInput.SelectAll(); } } else { MessageInput.Document.Dispatcher.Invoke(new Action(() => { keyDownTasker(eventObj); })); } }