在silverlight中淡出和消失一条路?

时间:2011-05-20 01:25:03

标签: c# silverlight path

我有一个如此定义的路径:

<Viewbox Visibility="Collapsed"  x:Name="Tick" Grid.Column="1" Grid.Row="1">
   <Canvas MaxWidth="100" MaxHeight="100"   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                                         Width="100" Height="100" Canvas.Left="0" Canvas.Top="0">
         <Path ...Fill="#FF00B800" x:Name="MyPath" (path dimensions, lines, etc) .../>
   </Canvas>
</Viewbox>

现在我想做的是操纵填充,这样会使路径具有淡入/淡出效果。基本上,根据路径内部的视图框是否可见,使填充alpha分量移向不透明或透明。因此,当可见时,路径会淡入,当折叠时,路径会淡出。

1 个答案:

答案 0 :(得分:1)

您尝试达到的效果是优雅的,但您当前的计划存在严重问题。当更高级别元素的Visibility(在这种情况下为Viewbox)设置为Visibility.Collapsed时,元素和所有子元素将立即不再可见。此时您希望Path的淡出开始。

所以Path已经不可见了,开始动画逐渐降低其不透明度将没有任何好处,因为它已经消失了。换句话说,当可见性设置为Visiblity.Collapsed时,对元素内部的事物做任何有用的事情都为时已晚,因为用户不会看到它们。如果可以的话,你会希望展望未来并知道你将改变可见性并开始动画,以便在你关闭元素之前完成它。

同样的问题不适用于我们使元素可见因为一切都很完美:我们变得可见并启动淡入动画。但由于效果的一半不起作用,我们仍然有一个大问题。

此问题的解决方案是向上一个级别,看看我们正在尝试做什么。在XAML中,我们只有被动元素ViewboxCanvasPath。但也许这些更像是控件或协助控件,例如检查CheckBox或类似复选框的控件。

控件可以具有状态:

  • 正常,MouseOver
  • 按下,已禁用
  • 不专注,专注
由于VisualStateManager

,这些州可以产生过渡效应

因此,如果淡入和淡出效果是控制行为的一部分,那么我们就拥有了一个完整的强大工具集来解决我们的问题。我不知道你的情况是否属于这种情况。

即使不是这种情况,对Silverlight过渡效果的一种非常可行的方法是将元素转换为无形控件,仅用于使用VisualStateManager,因为它使事情变得如此简单。也许这种替代方案可以适用于您的情况。