我有一个如此定义的路径:
<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分量移向不透明或透明。因此,当可见时,路径会淡入,当折叠时,路径会淡出。
答案 0 :(得分:1)
您尝试达到的效果是优雅的,但您当前的计划存在严重问题。当更高级别元素的Visibility
(在这种情况下为Viewbox
)设置为Visibility.Collapsed
时,元素和所有子元素将立即不再可见。此时您希望Path
的淡出开始。
所以Path
已经不可见了,开始动画逐渐降低其不透明度将没有任何好处,因为它已经消失了。换句话说,当可见性设置为Visiblity.Collapsed
时,对元素内部的事物做任何有用的事情都为时已晚,因为用户不会看到它们。如果可以的话,你会希望展望未来并知道你将改变可见性并开始动画,以便在你关闭元素之前完成它。
同样的问题不适用于我们使元素可见因为一切都很完美:我们变得可见并启动淡入动画。但由于效果的一半不起作用,我们仍然有一个大问题。
此问题的解决方案是向上一个级别,看看我们正在尝试做什么。在XAML中,我们只有被动元素Viewbox
,Canvas
和Path
。但也许这些更像是控件或协助控件,例如检查CheckBox
或类似复选框的控件。
控件可以具有状态:
VisualStateManager
。,这些州可以产生过渡效应
因此,如果淡入和淡出效果是控制行为的一部分,那么我们就拥有了一个完整的强大工具集来解决我们的问题。我不知道你的情况是否属于这种情况。
即使不是这种情况,对Silverlight过渡效果的一种非常可行的方法是将元素转换为无形控件,仅用于使用VisualStateManager
,因为它使事情变得如此简单。也许这种替代方案可以适用于您的情况。