2013-07-19 11 views
6

Mam siatkę z elementami w niej. Chcę przenieść wszystkie te elementy, więc czy nie można po prostu przesunąć siatki razem? Nie ma to żadnego wpływu na to, co widzę, i wypróbowałem nawet ScaleX i takie jak również.Animacja siatki do przesunięcia lub przesuwania w prawo WPF

<Grid x:Name="HancockDetails" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100" Grid.Column="1" RenderTransformOrigin="0.5,0.5">      
    <Rectangle HorizontalAlignment="Left" Height="100" Stroke="Black" VerticalAlignment="Top" Width="100"/> 
    <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Foreground="#FFF30000"/>    
      </Grid> 
      </Grid> 
     </s:ScatterViewItem> 

Moja funkcja:

Storyboard sb = new Storyboard(); 

DoubleAnimation slide = new DoubleAnimation(); 
slide.To = 3000.0; 
slide.From = 0; 
slide.Duration = new Duration(TimeSpan.FromMilliseconds(40.0)); 

// Set the target of the animation 
Storyboard.SetTarget(slide,HancockDetails); 
Storyboard.SetTargetProperty(slide, new PropertyPath("RenderTransform.(ScaleTransform.ScaleY)")); 

// Kick the animation off 
sb.Children.Add(slide); 
sb.Begin(); 

Odpowiedz

6

Musisz najpierw dodać RenderTransform w znacznikach, w przeciwnym razie środowisko wykonawcze nie może go znaleźć:

<Grid x:Name="HancockDetails" ...> 
    <Grid.RenderTransform> 
     <TranslateTransform /> 
    </Grid.RenderTransform> 
</Grid> 

zakładam chcesz użyć TranslateTransform, a nie ScaleTransform, ponieważ celem jest ślizgać nad siatką, aby nie zmienić jej rozmiaru?

Storyboard.SetTargetProperty(slide, 
    new PropertyPath("RenderTransform.(TranslateTransform.X)")); 
Storyboard.SetTargetProperty(slide, 
    new PropertyPath("RenderTransform.(TranslateTransform.X)")); 
+0

Nie można rozwiązać wszystkich odwołań do właściwości w ścieżce właściwości "RenderTransform. (TranslateTransform.XProperty)". Sprawdź, czy odpowiednie obiekty obsługują właściwości. – user99999991

+0

Próbowano także z "" – user99999991

+0

@ user2229804 można odwołać się bezpośrednio do TranslateTransform, tak jak powyżej? Myślę, że to mniej dezorientujące. Jeśli nie możesz, to myślę, że poprawna składnia byłaby "" (FrameworkElement). (TranslateTransform.X) "'. – McGarnagle

5

Zamiast próbować stworzyć storyboard przez strony jest muuuuuuch łatwiejsze w użyciu Expression Blend. Jest to bezpłatne narzędzie do projektowania, które uzupełnia kompilację wizualną Visual Studio. Opisany scenariusz zajęłby całe 30 sekund, a nie byłoby kodu. Wtedy, gdy chciałeś go uruchomić, byłby to po prostu łatwy, prawda? Oto zasoby. http://msdn.microsoft.com/en-us/expression/cc197141.aspx

+0

Zgadzam się, że w Blendzie jest to łatwe, ale muszę go stworzyć w zasadzie dla każdego obiektu. I mam wiele obiektów, które chcę przenieść w ten sam sposób. Jestem pewna, że ​​jest na to sposób, ale wygląda na to, że jest to bardziej skomplikowane niż po prostu wykonanie jednej funkcji, nie? – user99999991

+0

-1, Blend nigdy nie może komplementować VS. – Nitesh

+2

@Nitesh o czym ty mówisz? Blend to doskonałe narzędzie do rozwoju. Jak wielu specjalistów wie, inżynierowie nie są ekspertami od interfejsu użytkownika. Kiedy więc trzeba jednocześnie kodować i projektować, zwykle projekt jest WAY krótki. Jeśli możesz wziąć połowę tego problemu (kod), możesz skupić się na tym, co wygląda prawidłowo. Expression Blend to fantastyczne narzędzie. –

Powiązane problemy