【发布时间】:2012-03-25 09:04:03
【问题描述】:
我只想在用户将鼠标放在其位置上时显示一个按钮,一旦鼠标离开该区域,该按钮应该回到隐藏状态。这是我的按钮代码。
<StackPanel Name="ButtonOptions" Orientation="Horizontal" DockPanel.Dock="Bottom" Background="DarkBlue" Height="50" Width="auto">
<!--<StackPanel.Resources>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>-->
<Button Name="LoginButton" FontSize="12" Click="LoginButton_Click" Content="Log In" Width="100" Height="31" Margin="50,0,0,0"
FontFamily="Arial" Visibility="Visible" IsEnabled="True" MouseEnter="LoginButton_MouseEnter" />
<Button Name="OptionsButton" Content="Options" Width="100" Height="31" Margin="20,0,0,0" FontFamily="Arial"
FontSize="12" Click="OptionsButton_Click" Visibility="Hidden" IsEnabled="False"/>
</StackPanel>
资源部分已被注释掉,因为我试过了,但它不起作用。我的登录按钮附加了以下事件处理程序..
LoginButton.MouseEnter += new MouseEventHandler(LoginButton_MouseEnter);
处理这个的方法是..
private void LoginButton_MouseEnter(object sender, MouseEventArgs e)
{
MessageBox.Show("Made in the login button listener for mouseOver");
LoginButton.Visibility = Visibility.Visible;
}
当我运行我的应用程序时,当我将按钮放在应该放置的位置时没有任何反应。但是,如果我最初将登录按钮的可见性设置为可见,我可以看到该按钮,当我单击它时,我的用户登录的登录逻辑方法将被覆盖,并提示我使用消息框“Made in the login button listener for mouseOver”的 MouseEventListener 方法。不仅如此,我还收到了其中两条消息(当我第一次单击“确定”时,它立即再次弹出)我不知道为什么它不起作用,也不知道为什么我的点击事件方法被忽略和现在 mouseEvent 方法发生了。
任何想法或帮助将不胜感激,谢谢!
【问题讨论】:
-
按钮隐藏或折叠时不会触发事件。
-
不要使用弹出窗口来诊断鼠标悬停。您将收到两个弹出窗口,因为当您将鼠标悬停在对话框上以关闭它时,您不再将鼠标悬停在触发它的元素上!当对话框关闭时,它会再次触发鼠标悬停事件。
-
@iterationx:我认为这是真的,但如果你获得 IsHitTestVisible,你可能可以覆盖它。
-
如上所述 Visibiliy.Hidden 可能会导致按钮停止接收鼠标事件。不过,关于 Visibility 的 MSDN 文档并未提及这一点。如果没有其他工作,请尝试切换 Opacity 属性而不是 Visibility,看看是否有帮助。
-
@BojinLi:我正要建议也使用不透明度。我敢肯定,当不透明度设置为 0 时,您仍然会收到鼠标事件。此外,作为奖励,您可以考虑在鼠标悬停时为不透明度设置动画,以便按钮淡入而不是弹出。所有这些,当然,首先忽略隐藏元素是否是个好主意!
标签: wpf button visibility