我有一个 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>
然后我有一个函数,一旦我用 HyperLinkButtons 填充了 StackPanel,我就会调用它,
//Start with element off screen to right, scroll until off left
marquee.From = canvasInfo.ActualWidth;
marquee.To = -spMarquee.ActualWidth;
我遇到的问题是我无法为动画的持续时间锻炼合适的算法。无论我尝试什么都不一致(例如,1 个元素移动得太快,30 个元素移动得太慢)。
有没有人对这个动画的持续时间有任何建议,我猜它与 StackPanel 的宽度和元素的数量有关,但我无法得到任何合适和一致的东西。