如果我将回调附加到我的主用户控件的加载事件并检查ActualWidth
网格列的值,该值仍然为 0。我觉得很奇怪,因为文档指出:“加载事件在最终事件之前引发渲染,但在布局系统计算出所有必要的渲染值之后。”
基本上我需要,ActualWidth
所以我可以设置动画的“到”值(所以动画从 0 的宽度到实际宽度)。
如果我将回调附加到我的主用户控件的加载事件并检查ActualWidth
网格列的值,该值仍然为 0。我觉得很奇怪,因为文档指出:“加载事件在最终事件之前引发渲染,但在布局系统计算出所有必要的渲染值之后。”
基本上我需要,ActualWidth
所以我可以设置动画的“到”值(所以动画从 0 的宽度到实际宽度)。
和值在活动ActualWidth
期间ActualHeight
可用SizeChanged
。效果很好,因此您可以根据需要在应用程序调整大小时更新计算。
我最近使用事件在屏幕上随机放置元素发布了这个
我认为您可能试图以错误的方式解决问题。
您最好的选择是为ScaleTransform
添加到Grid
sRenderTransform
属性的 a 设置动画。这是一个这样做的例子:
<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>
您可以挂钩或覆盖LayoutUpdated
控件中的事件,而不是 Loaded 事件吗?您必须添加一些额外的逻辑以确保您的动画仅在适当的时间运行一次,但这可能会给您提供所需的额外灵活性。