WPF:如何在外部滚动查看器鼠标滚轮操作时关闭 <Popup>
WPF: How to close <Popup> when outside scrollviewer mousewheel action
我想要一个解决方案,当外部 scrollviewer mousewheel 改变时关闭弹出控制。
<ScrollViewer>
....
<Grid>
<TextBox x:Name="PART_Text"/>
<Popup IsOpen="{Binding IsDropDown}" StayOpen="False"
PlacementTarget{BInding ElementName=PART_Text">
<Border>...</Border>
</Popup>
</Grid>
</ScrollViewer>
我想让弹出窗口window在滚轮移动时自动关闭,而不是鼠标单击
未来提示:如果您能让人们轻松地回答问题,您就会有更好的运气。您的代码无法编译是因为 1) 您的 StaysOpen
属性 拼写错误,2) 您的 PlacementTarget
设置没有赋值运算符和开始引号,3) 您的 Binding
关键字大写错误和 4) setter 没有右括号。
要回答您的问题,您需要做的就是为 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
属性 支持 INPC,只要 PreviewMouseWheel
事件发生,弹出窗口就会消失。
我想要一个解决方案,当外部 scrollviewer mousewheel 改变时关闭弹出控制。
<ScrollViewer>
....
<Grid>
<TextBox x:Name="PART_Text"/>
<Popup IsOpen="{Binding IsDropDown}" StayOpen="False"
PlacementTarget{BInding ElementName=PART_Text">
<Border>...</Border>
</Popup>
</Grid>
</ScrollViewer>
我想让弹出窗口window在滚轮移动时自动关闭,而不是鼠标单击
未来提示:如果您能让人们轻松地回答问题,您就会有更好的运气。您的代码无法编译是因为 1) 您的 StaysOpen
属性 拼写错误,2) 您的 PlacementTarget
设置没有赋值运算符和开始引号,3) 您的 Binding
关键字大写错误和 4) setter 没有右括号。
要回答您的问题,您需要做的就是为 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
属性 支持 INPC,只要 PreviewMouseWheel
事件发生,弹出窗口就会消失。