2009-12-11 13 views
1

Si j'attache un rappel à l'événement chargé de mon contrôle utilisateur principal et que je vérifie le ActualWidth d'une colonne de grille, cette valeur est toujours 0. Je trouve cela étrange, étant donné que la documentation indique: "L'événement Loaded est déclenché avant le rendu final, mais après que le système de mise en page a calculé toutes les valeurs nécessaires pour le rendu. "Silverlight: quand est-ce que la largeur réelle n'est pas 0?

Fondamentalement, j'ai besoin du ActualWidth afin que je puisse définir la valeur 'to' d'une animation (donc quelque chose s'anime d'une largeur de 0 à la largeur réelle).

Répondre

3

Les ActualWidth et ActualHeight valeurs sont disponibles lors de l'événement SizeChanged. Ce qui fonctionne bien, de sorte que vous pouvez mettre à jour vos calculs lorsque vos applications redimensionne si nécessaire.

Je posted about this recently en utilisant l'événement au hasard des éléments postion sur l'écran

1

Je pense que vous essayez probablement de résoudre le problème de la mauvaise façon.

Le meilleur moyen est d'animer un ScaleTransform qui a été ajouté à la propriété Grid s '. Voici un exemple qui fait exactement cela:

<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> 
+0

Merci pour la réponse, mais ce n'est pas tout à fait ce que je cherche. Cette solution présente deux inconvénients: - La première colonne évolue évidemment au lieu de glisser. - Le contenu de la première colonne est animé, mais pas la colonne elle-même. Je pense que ma solution n'est pas fondamentalement viciée, mais qu'elle se résume à un problème/une question: quand puis-je m'attendre à ce que la propriété 'ActualWidth' de la première colonne soit correcte. –

1

Pouvez-vous brancher ou remplacer l'événement LayoutUpdated dans votre contrôle, plutôt que l'événement Loaded? Vous devrez ajouter une logique supplémentaire pour vous assurer que votre animation n'est exécutée qu'une seule fois, au moment opportun, mais cela peut vous donner la flexibilité supplémentaire dont vous avez besoin.

+0

Peu importe: la suggestion d'Adam Kinney d'utiliser l'événement SizeChanged est meilleure. –