我需要一个单行的AvalonEdit控件(相当于AcceptsReturn=为“False”的TextBox )。
AvalonEdit似乎没有这个属性。
如何为AvalonEdit执行此操作?
发布于 2012-04-20 19:15:12
您可以尝试处理PreviewKeyDown事件,如果键是Return,则将e.Handled设置为true。
此外,我猜测您希望防止将换行符粘贴到文本区。这必须通过以下方式来完成:
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
// Find the Paste command of the avalon edit
foreach (var commandBinding in textEditor.TextArea.CommandBindings.Cast<CommandBinding>())
{
if (commandBinding.Command == ApplicationCommands.Paste)
{
// Add a custom PreviewCanExecute handler so we can filter out newlines
commandBinding.PreviewCanExecute += new CanExecuteRoutedEventHandler(pasteCommandBinding_PreviewCanExecute);
break;
}
}
}
void pasteCommandBinding_PreviewCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
// Get clipboard data and stuff
var dataObject = Clipboard.GetDataObject();
var text = (string)dataObject.GetData(DataFormats.UnicodeText);
// normalize newlines so we definitely get all the newlines
text = TextUtilities.NormalizeNewLines(text, Environment.NewLine);
// if the text contains newlines - replace them and paste again :)
if (text.Contains(Environment.NewLine))
{
e.CanExecute = false;
e.Handled = true;
text = text.Replace(Environment.NewLine, " ");
Clipboard.SetText(text);
textEditor.Paste();
}
}发布于 2012-08-17 05:05:00
下面是我的Editor.TextArea.PreviewKeyDown处理程序:
private void TabToOkayBtn(object sender, KeyEventArgs args)
{
if (args.Key == Key.Tab)
{
args.Handled = true;
Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() => // input priority is always needed when changing focus
_editor.TextArea.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next))));
}
}您还可以检查换档状态以转到“上一个”,并使用三元运算符选择方向:
var shiftPressed = (args.KeyboardDevice.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift;https://stackoverflow.com/questions/10238921
复制相似问题