如果我将回调附加到主用户控件的loaded事件并检查网格列的ActualWidth,则该值仍为0。我觉得这很奇怪,因为文档中说:“在最终渲染之前,但在布局系统计算了渲染所需的所有值之后,就会引发已加载的事件。”
基本上我需要ActualWidth,这样我就可以设置动画的' to‘值(这样就会有从0到实际宽度的动画)。
发布于 2009-12-15 15:31:32
ActualWidth和ActualHeight值在SizeChanged事件期间可用。如果需要,你可以在你的应用程序调整大小时更新你的计算。
I posted about this recently使用事件在屏幕上随机放置元素
发布于 2009-12-11 18:54:32
我认为你可能试图以错误的方式解决问题。
最好的方法是对添加到Grid的RenderTransform属性中的ScaleTransform进行动画处理。下面的示例就是这样做的:
<Grid x:Name="LayoutRoot">
<Grid.Triggers>
<EventTrigger RoutedEvent="Grid.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="MyScaleTransform" Storyboard.TargetProperty="ScaleX" From="0" To="1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Grid.Triggers>
<Grid Background="Blue" >
<Grid.RenderTransform>
<ScaleTransform x:Name="MyScaleTransform" />
</Grid.RenderTransform>
</Grid>
</Grid>发布于 2009-12-15 15:32:49
是否可以挂钩或重写控件中的LayoutUpdated事件,而不是Loaded事件?您必须添加一些额外的逻辑,以确保您的动画只在适当的时间运行一次,但这可能会为您提供所需的额外灵活性。
https://stackoverflow.com/questions/1887108
复制相似问题