gpt4 book ai didi

.net - Avalon 文本编辑器中上下键的光标位置没有改变

转载 作者:行者123 更新时间:2023-12-02 01:52:52 25 4
gpt4 key购买 nike

我使用的是Avalon 文本编辑器,并且向上键和向下键的光标位置没有改变。谁能建议我如何克服这个问题?

针对左右键导航,光标位置会正确更改。

我还检查了按键事件中插入符号的值,并且它不会因向上和向下按键而改变。

最佳答案

正如 @Mike-Strobel 所说,您需要将处理的事件参数标记为 false,否则底层 TextEditor 控件将不会接收该事件。您应该检查您的 PreviewKeyDown 事件,PreviewKeyUp 事件不会阻止光标事件。

private void TextEditor_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
e.Handled = false;
}

如果您只是尝试从控件捕获文本,并且使用 MVVM 模式,那么您可能需要查看我用于将数据绑定(bind)到 Text 属性的行为。这使您可以消除代码隐藏。

<avalonedit:TextEditor
x:Name="TextEditor"
FontFamily="Consolas"
FontSize="10pt"
LineNumbersForeground="Silver"
ShowLineNumbers="True"
SyntaxHighlighting="XML"
PreviewKeyDown="TextEditor_PreviewKeyDown"
PreviewKeyUp="TextEditor_PreviewKeyUp"
WordWrap="True">
<i:Interaction.Behaviors>
<behaviors:AvalonEditTextBindingBehavior TextBinding="{Binding XamlEditText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</i:Interaction.Behaviors>
</avalonedit:TextEditor>

您的 xaml 用户控件或窗口中需要几个命名空间:

xmlns:behaviors="clr-namespace:MatrixGold.Behaviors"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

以下是该行为的代码:

using System;
using System.Windows;
using System.Windows.Interactivity;
using ICSharpCode.AvalonEdit;

namespace MyProject.Behaviors
{
public sealed class AvalonEditTextBindingBehavior : Behavior<TextEditor>
{
public static readonly DependencyProperty TextBindingProperty = DependencyProperty.Register("TextBinding", typeof(string), typeof(AvalonEditTextBindingBehavior), new FrameworkPropertyMetadata(default(string), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, PropertyChangedCallback));

private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
var behavior = dependencyObject as AvalonEditTextBindingBehavior;
if (behavior.AssociatedObject != null)
{
var editor = behavior.AssociatedObject;
if (editor.Document != null
&& dependencyPropertyChangedEventArgs.NewValue != null)
{
// Update Text from Binding
editor.Document.Text = dependencyPropertyChangedEventArgs.NewValue.ToString();

// If Pasting In, Scroll to End of Content just Inserted
var caretOffset = editor.CaretOffset;
if (caretOffset > editor.Document.TextLength)
{
caretOffset = editor.Document.TextLength;
editor.CaretOffset = caretOffset;
}
}
else
{
editor.Document.Text = string.Empty;
}
}
}

public string TextBinding
{
get { return (string) GetValue(TextBindingProperty); }
set { SetValue(TextBindingProperty, value); }
}

protected override void OnAttached()
{
base.OnAttached();
if (AssociatedObject != null)
AssociatedObject.TextChanged += AssociatedObjectOnTextChanged;
}

protected override void OnDetaching()
{
base.OnDetaching();
if (AssociatedObject != null)
AssociatedObject.TextChanged -= AssociatedObjectOnTextChanged;
}

private void AssociatedObjectOnTextChanged(object sender, EventArgs eventArgs)
{
var textEditor = sender as TextEditor;
if (textEditor != null)
{
if (textEditor.Document != null)
TextBinding = textEditor.Document.Text;
}
}
}
}

关于.net - Avalon 文本编辑器中上下键的光标位置没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com