User 7429338 Ответов: 1

Avalonedit scrollchanged программно


Я использую AvalonEdit для отображения файла с подсветкой синтаксиса, и я хотел бы обработать событие ScrollChanged. Я могу зарегистрироваться для него в xaml вот так:
<avalonedit:TextEditor ScrollViewer.ScrollChanged="TextEditor_ScrollChanged">

Однако я хотел бы создать подкласс, который обрабатывает это, поэтому мне не нужно делать это в коде окна каждый раз, но я не смог понять, как это сделать.

Что я уже пробовал:

Следующие попытки не сработали:

public class MySubClass : TextEditor
{
  public MySubClass()
  {
    // Cannot convert type 'MyProgram.MySubClass' to 'System.Windows.Controls.ScrollViewer'
    ((ScrollViewer)this).ScrollChanged += ScrollChanged;

    // Cannot convert type 'ICSharpCode.AvalonEdit.Editing.TextArea' to 'System.Windows.Controls.ScrollViewer'
    ((ScrollViewer)TextArea).ScrollChanged += ScrollChanged;
  }


Я также попробовал предложить аналогичный вопрос на stackoverflow: c# - Как обработать событие ' ScrollViewer.ScrollChanged` в MVVM? - переполнение стека[^], но UIHelper.FindChildren(this) не находит ScrollViewer.

1 Ответов

Рейтинг:
10

Richard Deeming

Добавить обработчик маршрутизируемого события :

public class MySubClass : TextEditor
{
    public MySubClass()
    {
        AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(ScrollChanged));
    }


[no name]

Спасибо, это идеальное решение!
[Правка] ваша правка еще более элегантна. Однако мне пришлось немного изменить его, чтобы заставить работать:

AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(ScrollChanged));

Richard Deeming

Спасибо - я добавил Это к решению. :)