【发布时间】:2013-12-26 13:05:33
【问题描述】:
我在 Viewbox 中添加了如下效果:
<Viewbox Height="40" Width="40" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,12.5,65,0" >
<Viewbox.Effect>
<effects:RippleEffect Magnitude="0" Frequency="0" />
</Viewbox.Effect>
<Grid>
<Rectangle x:Name="MinimizeRect" RadiusX="7" RadiusY="7" StrokeThickness="2" Stroke="White" Fill="Transparent"/>
<Image Source="Images/Minimize.png" Margin="5"/>
</Grid>
<Viewbox.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter" >
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(Effect).Magnitude" To="0.1" Duration="0:0:0.3" AutoReverse="True" RepeatBehavior="Forever" />
<DoubleAnimation Storyboard.TargetProperty="(Effect).Frequency" To="40" Duration="0:0:0.3" AutoReverse="True" RepeatBehavior="Forever"/>
<ColorAnimation Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" To="DodgerBlue" Duration="0:0:0.3" Storyboard.TargetName="MinimizeRect"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave" >
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(Effect).Magnitude" To="0" Duration="0:0:0.3" />
<DoubleAnimation Storyboard.TargetProperty="(Effect).Frequency" To="0" Duration="0:0:0.3" />
<ColorAnimation Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" To="Transparent" Duration="0:0:0.3" Storyboard.TargetName="MinimizeRect"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Viewbox.Triggers>
</Viewbox>
但我的图像和矩形描边不会保持白色。它们是灰色的。这里可能有什么问题?
这是图片。
在上图中,“最小化”按钮添加了波纹效果。关闭按钮不会添加任何效果。
【问题讨论】:
-
这些总是很难通过简单的事件触发器来管理。例如,如果您 1) 将鼠标悬停在按钮上 2) 等待动画完成 3) 将鼠标从按钮上移出,它可能会完美运行。对于这样的事情,我绝对推荐你使用visual states,它可以一直工作而不会大惊小怪。
-
只是一点猜测。您使用 ViewBox 来缩放内容。这行得通,但您应该或多或少地知道 ViewBox 会拍摄“屏幕截图”并对其进行缩放。缩小图像可能会导致奇怪的结果。尤其是从白色变为灰色的模糊边框。
-
效果是否必须应用到 ViewBox 上?从图形来看,将它们转换为几何路径数据可能更有意义,因此它们实际上是矢量 xaml 图像,并且不会关心它们是如何被操纵的,而是保持相同的分辨率而不是使用光栅图像。