如何在Silverlight上为堆栈面板创建鼠标悬停状态?

时间:2009-08-11 08:19:19

标签: c# silverlight state blend stackpanel

我正在尝试创建鼠标悬停状态,当鼠标悬停在堆栈面板上时,它会改变其不透明度。

我已经创建了状态,并为堆栈面板创建了一个mouse_enter事件,并且在cs文件后面的代码中,我在Mouse_Enter事件上有以下代码。

MouseOver.Begin();

其中MouseOver是StoryBoard的名称,但当我的鼠标悬停在堆栈面板上甚至点击堆栈面板时,什么也没发生,我错过了什么?

由于

PlayKid

3 个答案:

答案 0 :(得分:1)

我想出了自己。

使用此代码:

VisualStateManager.GoToState

谢谢大家。

答案 1 :(得分:0)

您确定事件已被触发(您已正确连接事件)吗?尝试使用消息框或其他东西进行检查。 (System.Windows.MessageBox.Show()

你确定故事板在其他情况下运行良好(在页面加载时尝试过吗?)

如果这些都有效,请解释你如何添加事件处理程序。

答案 2 :(得分:0)

根据我的经验,将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的故障排除建议,但是如果你根本无法触发事件(我认为这是问题),请试一试。