Совет на будущее: вам больше повезет, если вы получите ответы на вопросы, если вам будет проще. Ваш код не компилируется из-за того, что: 1) ваше свойство StaysOpen
написано с ошибкой, 2) в настройке PlacementTarget
нет оператора присваивания и открывающей цитаты, 3) ваше ключевое слово Binding
написано с заглавной буквы и 4 ) сеттер не имеет закрывающей скобки.
Чтобы ответить на ваш вопрос, все, что вам нужно сделать, это добавить обработчик команды для события PreviewMouseWheel
. То, где вы перехватываете событие, зависит от того, какое поведение вы хотите; если вы хотите, чтобы это происходило, когда любой элемент управления в вашем приложении имеет фокус, добавьте его в MainWindow, в противном случае добавьте его в ScrollViewer:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<ScrollViewer>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseWheel">
<i:InvokeCommandAction Command="{Binding PreviewMouseWheelCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
Затем добавьте обработчик команд для него обратно в модель представления:
private ICommand _PreviewMouseWheelCommand;
public ICommand PreviewMouseWheelCommand => this._PreviewMouseWheelCommand ?? (this._PreviewMouseWheelCommand = new RelayCommand(OnPreviewMouseWheel));
private void OnPreviewMouseWheel()
{
this.IsDropDown = false;
}
Пока ваше свойство IsDropDown
поддерживает INP C, всплывающее окно будет исчезать всякий раз, когда происходит событие PreviewMouseWheel
.