Witajcie,
chciałam uzyskać efekt przesuwanego tekstu - "marquee".
Kod, który mam to:
<Canvas>
<TextBlock Name="TextBlockMarquee" Text="Przykładowy tekst" FontSize="72" Foreground="#FFFFFFFF" />
</Canvas>
oraz
var doubleAnimation = new DoubleAnimation
{
From = this.ActualWidth,
To = -TextBlockMarquee.ActualWidth,
RepeatBehavior = RepeatBehavior.Forever,
Duration = new Duration(TimeSpan.FromSeconds(40))
};
TextBlockMarquee.BeginAnimation(Canvas.LeftProperty, doubleAnimation);
Działa prawidłowo, czyli tekst wysuwa się z prawej strony i przesuwa do lewej gdzie się chowa.
Chciałabym jednak zmieniać tekst w trakcie działania programu. Usunęłam Text="Przykładowy tekst"
w XAML i dodałam do kodu
marquee.Text = "Nowy przykładowy tekst";
...i niestety przestało działać. Tekst zamiast chować się z lewej strony to znika jak tylko dotknie krawędzi ekranu.
Domyślam się, że to przez -TextBlockMarquee.ActualWidth
, który wynosi w tej chwili 0 (wiem, bo wyświetliłam tę wartość w pomocniczym TextBlock).
Kiedy tekst jest umieszczony w kodzie XAML to szerokość jest prawidłowo podawana.
Tak więc moje pytanie brzmi - jak to przerobić, żeby działało? Jak obliczyć tę szerokość tekstu w TextBlock jeżeli tekst nie jest podany w XAML a w kodzie c#?