1

HyperLinkBut​​ton コントロールを追加する StackPanel 要素があり、return IEnumerable の要素ごとに 1 つです。この 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 に HyperLinkBut​​ton を設定した後に呼び出す関数を用意します。

//Start with element off screen to right, scroll until off left
marquee.From = canvasInfo.ActualWidth;
marquee.To = -spMarquee.ActualWidth;

私が抱えている問題は、アニメーションの持続時間に適したアルゴリズムをワークアウトできないことです。何を試しても一貫性がありません (たとえば、1 つの要素の動きが速すぎる、30 の要素の動きが遅すぎるなど)。

このアニメーションの期間を計算するための提案はありますか?それは StackPanel の幅と要素の数に関係していると思いますが、適切で一貫したものを得ることができません。

4

1 に答える 1

3

式は次のとおりです。

  • 時間=距離÷速さ

100 ピクセル/秒などの速度を選択してプラグインします。

double speed = 100.0;
marquee.Duration = new Duration(TimeSpan.FromSeconds(Math.Abs(marquee.From.Value - marquee.To.Value) / speed));
于 2011-01-21T07:36:50.953 に答える