如果我将回调连接到主用户控件的已加载事件并检查网格列的ActualWidth
,那么该值仍为0.我发现它很奇怪,因为文档指出: Loaded事件在最终渲染之前引发,但在布局系统计算出所有必要的渲染值之后。“
基本上我需要ActualWidth
所以我可以设置动画的'到'值(所以动画从宽度0到实际宽度)。
答案 0 :(得分:3)
ActualWidth
事件期间ActualHeight
和SizeChanged
值可用。这样做很好,因此您可以在需要时调整应用程序大小时更新计算。
我posted about this recently使用该事件在屏幕上随机定位元素
答案 1 :(得分:1)
我认为你可能试图以错误的方式解决问题。
最好的办法是为添加到ScaleTransform
s Grid
媒体资源的RenderTransform
设置动画。这是一个例子:
<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>
答案 2 :(得分:1)
您可以挂钩或覆盖控件中的LayoutUpdated
事件,而不是Loaded事件吗?您必须添加一些额外的逻辑以确保您的动画仅在适当的时间运行一次,但它可能会为您提供所需的额外灵活性。