我有一个标签的鼠标悬停事件打开了一个弹出窗口。
我正在尝试处理弹出窗口上的mouseleave事件并关闭弹出窗口。
我遇到的问题是,直到我单击弹出窗口之外的任何地方,鼠标离开事件才被触发。
有人能告诉我我做错了什么吗?
这是密码。
XAML:
<Popup Name="myPopup" IsOpen="False" PlacementTarget="{Binding ElementName=myButton}" StaysOpen="False" MouseLeave="myPopup_MouseLeave">
<DataGrid MinHeight="400" MinWidth="300" Name="dtgPopup" AutoGenerateColumns="False" ItemsSource="{Binding}" SelectionChanged="dtgPopup_SelectionChanged" IsReadOnly="True" CanUserAddRows="False">
</DataGrid>
</Popup>
<Label Name="recentPanels" Content="Recent Panels" MouseEnter="recentPanels_MouseEnter"/>
事件处理程序:
private void recentPanels_MouseEnter(object sender, MouseEventArgs e)
{
myPopup.IsOpen = true;
}
private void myPopup_MouseLeave(object sender, MouseEventArgs e)
{
myPopup.IsOpen = false;
}
3条答案
按热度按时间gwbalxhn1#
如果你愿意,你可以在wpf中单独处理这个问题,这取决于你想让你的代码保持多干净。这样你就可以使用IsMouseOver而不是检测MouseLeave/MouseEnter。
在TextBlock中使用MultiDataTrigger触发资源,如下所示:
cu6pst1q2#
根据我的经验,似乎需要单击鼠标才能意识到鼠标指针实际上已经离开窗体或弹出窗口。一个易于实现的变通方法如下,使用OnMouseLeave而不是MouseLeave事件。
更多信息:http://msdn.microsoft.com/en-us/library/system.windows.controls.control.onmouseleave(v=vs.95).aspx
bz4sfanl3#
将鼠标离开事件放在数据网格上,而不是弹出窗口上