У меня есть элемент StackPanel, в который я добавляю элементы управления HyperLinkButton, по одному для каждого элемента в возвращаемом IEnumerable.Эта StackPanel содержится в элементе Canvas.
После заполнения StackPanel я запускаю анимацию, чтобы изменить свойство Canvas.Left, чтобы гиперссылки прокручивались слева направо.Мой XAML выглядит примерно так:
<Canvas Height="20" VerticalAlignment="Stretch" x:Name="canvasInfo">
<Canvas.Resources>
<Storyboard x:Name="storyBoardMarquee">
<DoubleAnimation x:Name="marquee" BeginTime="00:00:00" Storyboard.TargetName="spMarquee" Storyboard.TargetProperty="(Canvas.Left)" From="0"/>
</Storyboard>
</Canvas.Resources>
<StackPanel Orientation="Horizontal" x:Name="spMarquee" >
<StackPanel.Resources>
<Style TargetType="HyperlinkButton">
<Setter Property="Margin" Value="200,0,0,0"/>
</Style>
</StackPanel.Resources>
</StackPanel>
</Canvas>
У меня есть функция, которую я вызываю после заполнения StackPanel с помощью HyperLinkButtons,
//Start with element off screen to right, scroll until off left
marquee.From = canvasInfo.ActualWidth;
marquee.To = -spMarquee.ActualWidth;
Проблема, с которой я сталкиваюсьявляется то, что я не могу выработать подходящий алгоритм для продолжительности анимации.Все, что я пытаюсь сделать, не соответствует (например, 1 элемент движется слишком быстро, 30 элементов движется слишком медленно).
Есть ли у кого-нибудь какие-либо предложения по определению продолжительности этой анимации, полагаю, она должнас шириной StackPanel и количеством элементов, но я просто не могу получить ничего подходящего и последовательного.