Я строю специализированный редактор на основе этого проекта: https://github.com/Stumpii/ScintillaNET.WPF
Чтобы воспроизвести проблему, вам нужно скачать весь проект (он просто работает), но на мой вопрос задействовано только 2 файла.
Моя цель: когда я создаю новый документ, я хочу сразу же начать его набирать. Как и сейчас, вы должны сначала сфокусировать окно редактора.
Итак, я создал процедуру для фокусировки ActiveDocument
. И это работает. Иногда.
Измененный код:
в MainWindow.xaml
Я добавил эту однострочную строку:
<MenuItem Name="focusDocument" Click="focusWindowMenuItem_Click" Header="_Focus"/>
в MainWindow.xaml.cs
Я изменил / добавил:
// I changed this
private void newMenuItem_Click(object sender, RoutedEventArgs e)
{
NewDocument(); // adds new document and makes it the ActiveDocument
// I added this line
FocusScintilla(); // doesn't do anything
}
// I added this
private void focusWindowMenuItem_Click(object sender, RoutedEventArgs e)
{
FocusScintilla(); // works as expected
}
// I added this
// put focus on active document (and optionally move caret, not important here)
private void FocusScintilla(int offSet = 0)
{
if (ActiveDocument == null) { return; }
ActiveDocument.Scintilla.Scintilla.CurrentPosition = ActiveDocument.Scintilla.CurrentPosition + offSet;
ActiveDocument.Scintilla.Scintilla.AnchorPosition = ActiveDocument.scintilla.CurrentPosition;
ActiveDocument.Scintilla.Scintilla.Focus();
}
Мой вопрос: почему это работает с focusWindowMenuItem_Click
, а не с обработчиком newMenuItem_Click
?
В окне вывода есть подсказка: после того, как newMenuItem_Click
завершится , это читает SetFocusOnLastElement(focused=False, model=SCide.WPF.DocumentForm, element=)
. Эта строка не отображается после focusWindowMenuItem_Click
. Это наводит меня на мысль, что это как-то связано с AvalonDock
выполнением некоторой пост-обработки после добавления нового документа, возможно, в ответ на отображаемое окно? Поэтому я искал еще немного и нашел эту тему: AvalonDock focus Содержимое LayoutDocument , но я не смог перевести это в мою ситуацию.
Я мог бы воспользоваться некоторыми советами здесь.