wpf - 在 Silverlight/WPF 按钮上设置 MouseOver 的样式

标签 wpf silverlight xaml styling

努力为按钮设置鼠标样式......我已经设法设置按钮样式(纯红色),但我希望它在鼠标悬停时更改为纯黑色。我是 XAML 的新手,我可以看到它需要某种类型的 Storyboard/动画......不确定如何做到这一点。

任何帮助将不胜感激。

最佳答案

这与 WPF 到 Silverlight 不同。在 WPF 中,Rob 的答案是正确的。

在 Silverlight 中,这不起作用。 Silverlight 使用 VisualStateManager 而不是触发器。这个的代码比较复杂,但也有人觉得这样更好。您最终不得不以您的风格创建一个控件模板。 (有关定义控件模板的信息,请参阅 This Article。创建类似 ControlTemplate 的最简单方法是使用 Expression Blend,它具有为您完整提取现有模板的功能。)

在控件模板中,定义您关心的 VisualState 以及您想要发生的事情。

<VisualStateGroup x:Name="CommonStateGroup">
    <VisualState x:Name="MouseOverState">
        <Storyboard>
            <ColorAnimation Storyboard.TargetName="TopmostElementOfTheTemplate" 
                                       Storyboard.TargetProperty="Foreground" 
                                       To="Black"
                                       Duration="00:00:00" >
            </ColorAnimation>
        </Storyboard>
    </VisualState>
</VisualStateGroup>
...

在样式中指定默认前景色也很重要,就像 Rob 上面所做的那样。如果您在控件上指定它,它将覆盖样式中的值。

请注意,可以从 WPF Toolkit 中获取 VisualStateManager 以在 WPF 中具有类似的解决方案。

关于wpf - 在 Silverlight/WPF 按钮上设置 MouseOver 的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2401519/

相关文章:

c# - 为什么样式 TargetType ="Window"在从 App.xaml 设置时不起作用?

xaml - Xamarin - CollectionView,将当前项目作为命令参数传递

c# - 在 C# 中以编程方式调整 wpf 窗口的大小

c# - 将 JSON 字符串解析为对象的最简单的 C# 函数是什么?

c# - 如何将多个 View 的DataContext设置为ViewModel的一个实例

c# - 如何在不占用大量内存的情况下显示图像

.net - 如何在非 Silverlight .NET 应用程序 (.NET 4.0/WPF) 中使用 System.Json

c# - 按日期排序 ListView

c# - WPF 最大化窗口大于屏幕

c# - .NET 可移植类库中的 .ToShortDateString 发生了什么