Silverlight:实际宽度何时不是0?

Silverlight:实际宽度何时不是0?,silverlight,actualwidth,Silverlight,Actualwidth,如果将回调附加到主用户控件的已加载事件并检查网格列的实际宽度,则该值仍然为0。我觉得很奇怪,因为文档说明:加载的事件在最终渲染之前引发,但在布局系统计算了渲染所需的所有值之后 基本上,我需要实际宽度,这样我可以设置动画的“到”值,使某些动画的宽度从0变为实际宽度。我认为您可能试图以错误的方式解决问题 最好的方法是为添加到栅格的RenderTransform属性的ScaleTransform设置动画。这里有一个例子可以做到这一点: <Grid x:Name="LayoutRoot"&g

如果将回调附加到主用户控件的已加载事件并检查网格列的实际宽度,则该值仍然为0。我觉得很奇怪,因为文档说明:加载的事件在最终渲染之前引发,但在布局系统计算了渲染所需的所有值之后


基本上,我需要实际宽度,这样我可以设置动画的“到”值,使某些动画的宽度从0变为实际宽度。

我认为您可能试图以错误的方式解决问题

最好的方法是为添加到栅格的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>

我认为你可能试图用错误的方式解决这个问题

最好的方法是为添加到栅格的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>
实际宽度和实际高度值在SizeChanged事件期间可用。这很好,所以当应用程序需要调整大小时,您可以更新计算

I使用事件在屏幕上随机放置元素

在SizeChanged事件期间,实际宽度和实际高度值可用。这很好,所以当应用程序需要调整大小时,您可以更新计算


I使用事件在屏幕上随机放置元素

是否可以在控件中钩住或覆盖LayoutUpdated事件,而不是加载的事件?您必须添加一些额外的逻辑,以确保动画在适当的时间只运行一次,但这可能会给您带来所需的额外灵活性。

您能否在控件中钩住或覆盖LayoutUpdated事件,而不是加载的事件?您必须添加一些额外的逻辑,以确保您的动画在适当的时间只运行一次,但它可能会为您提供所需的额外灵活性。

Thx的答复,但这不是我想要的。此解决方案有两个缺点:-第一列显然会逐渐存在,而不是滑入。-第一列的内容将设置动画,但列本身不会。我认为我的解决方案并没有根本上的缺陷,而是归结到一个问题:我什么时候可以期望第一列的'ActualWidth'属性是正确的。Thx的回答,但它不是我想要的。此解决方案有两个缺点:-第一列显然会逐渐存在,而不是滑入。-第一列的内容将设置动画,但列本身不会。我认为我的解决方案并没有根本上的缺陷,而是归结到一个问题:我什么时候可以期望第一列的“ActualWidth”属性是正确的。没关系——亚当·金尼建议使用SizeChanged事件更好。没关系——亚当·金尼建议使用SizeChanged事件更好。