我正在尝试创建一个鼠标悬停状态,当鼠标悬停在堆栈面板上时它会改变其不透明度。
我已经创建了状态,并为堆栈面板创建了一个 mouse_enter 事件,并且在 cs 文件后面的代码中,我在 Mouse_Enter 事件上有以下代码。
MouseOver.Begin();
MouseOver 是 StoryBoard 的名称,但是当我的鼠标悬停在堆栈面板上甚至单击堆栈面板时,什么也没发生,我错过了什么?
谢谢
玩小子
我正在尝试创建一个鼠标悬停状态,当鼠标悬停在堆栈面板上时它会改变其不透明度。
我已经创建了状态,并为堆栈面板创建了一个 mouse_enter 事件,并且在 cs 文件后面的代码中,我在 Mouse_Enter 事件上有以下代码。
MouseOver.Begin();
MouseOver 是 StoryBoard 的名称,但是当我的鼠标悬停在堆栈面板上甚至单击堆栈面板时,什么也没发生,我错过了什么?
谢谢
玩小子
我自己想通了。
使用此代码:
VisualStateManager.GoToState
感谢大家。
您确定事件已触发(您已正确连接事件)?尝试使用消息框或其他东西进行检查。( System.Windows.MessageBox.Show()
)
您确定故事板在其他情况下运行良好(在页面加载时尝试过吗?)
如果这两种方法都有效,请说明您是如何添加事件处理程序的。
根据我的经验,将 Mouse_Enter 事件连接到面板是行不通的,因为面板内的内容最终会窃取该事件。我通常的解决方案是设置一个透明目标,覆盖我想要鼠标事件的区域,并将该项目保持在可视树的顶部。所以 XAML 看起来像:
<StackPanel x:Name="ContentPanel" SizeChanged="ContentPanelSizeChanged" >
< /*Some content here */ >
</StackPanel>
<Canvas x:Name="HitTarget" Mouse_Enter="HitTargetMouseEnter" />
然后 ContentPanelSizeChanged 处理程序将 HitTarget Canvas 的大小设置为 StackPanel 的实际(渲染)大小。同样的事情适用于 MouseButtonDown 事件,我认为它也适用于 MouseWheel 事件。我建议尝试 Senthil 的故障排除建议,但如果您根本无法触发事件(我认为这是问题所在),请尝试一下。