如何在xaml中向C#AvalonEdit Caret PositionChanged事件添加事件处理程序

时间:2017-11-14 00:46:10

标签: c# wpf xaml avalonedit

我在xaml中定义了一个数据模板:

IObservable<char> sequence = Observable.Create<char>(o =>
{
    string message = "hello world!";
    return Scheduler.Default.Schedule<string>(message, TimeSpan.FromMilliseconds(250.0), (state, schedule) =>
    {
        if (!String.IsNullOrEmpty(state))
        {
            o.OnNext(state[0]);
            schedule(state.Substring(1), TimeSpan.FromMilliseconds(250.0));
        }
        else
        {
            o.OnCompleted();
        }
    });
});

我需要向此添加ICSharpCode.AvalonEdit.TextEditor.TextArea.Caret.PositionChanged事件。我怎么能这样做?

1 个答案:

答案 0 :(得分:-1)

你无法在你的xaml中访问它,你必须在你的代码中设置它。

你可以这样做:

AvalonTextEditorControl.TextArea.Caret.PositionChanged += new EventHandler(
    (sender, args) => {
         // do some stuff
    }
);

或者使用单独的事件函数,当您喜欢它时:

AvalonTextEditorControl.TextArea.Caret.PositionChanged += TextEditorCaret_PositionChanged;

private void TextEditorCaret_PositionChanged(object sender, EventArgs e)
{
    // do some stuff
}

<强>更新

如果您想在XAML中使用它,可能是因为您的DataTemplate。您必须自己实现这一点。我有点比你有两个选择:

  1. 从GitHub上的ICSharpCode.AvalonEdit获取源代码并修改TextEditor类。只需添加一个EventHandler并在TextArea.Caret.PositionChanged事件中调用它。
  2. 创建您自己的UserControl,它继承自ICSharpCode.AvalonEdit TextEditor并添加类似于选项1的EventHandler。