WPF边距厚度

时间:2011-08-30 11:31:43

标签: wpf animation width margin stackpanel

背景: 我正在将图像加载到水平显示的堆栈面板(称为MainStack)中(为了参数,10张图像),只有4个图像可供查看。当我从列表中加载图像时,我将每个图像的宽度设置为300,因此它们都在相同大小的框中。

我想使用Stack Panel的Margin(左)属性从右向左移动图像。我希望滚动的外观与每个图像的宽度完全相同(循环延迟4秒),直到最后一个图像在视图中。这是我的Margin动画代码:

    Dim result As New Storyboard
    Dim animation As New ThicknessAnimation
    animation.From = MainStack.Margin
    animation.EasingFunction = New PowerEase() With {.EasingMode = EasingMode.EaseInOut, .Power = 3}
    animation.To = New Thickness(-300, 0, 0, 0)
    animation.Duration = New Duration(TimeSpan.FromSeconds(1.5))

    Storyboard.SetTarget(animation, MainStack)
    Storyboard.SetTargetProperty(animation, New PropertyPath("Margin"))
    result.Children.Add(animation)
    result.Begin()

奇怪的事情正在发生。堆栈面板向左移动,但只移动了图像宽度的一半左右。

发生了什么事???

/ *编辑* / 按照H.B.建议,我试图实现TranslateTransform但没有取得多大成功。

任何人都可以看到此代码有任何问题吗?

    Dim translatePosition = New Point(300, 0)

    RenderTransform = New TranslateTransform()
    Dim d As New Duration(New TimeSpan(0, 0, 0, 1, 30))
    Dim x As New DoubleAnimation(translatePosition.X, d)

    Storyboard.SetTarget(x, MainStack)
    Storyboard.SetTargetProperty(x, New PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"))

    Dim sb As New Storyboard()
    sb.Children.Add(x)
    sb.Begin()

似乎没有发生任何事情。 本

2 个答案:

答案 0 :(得分:0)

我认为您应该尝试将整个堆栈面板放在画布中,然后设置动画Canvas.Left属性以滚动图像。

答案 1 :(得分:0)

另一个选择是使用水平ListBox,然后您可以为ScrollViewer设置动画。如果您想以这种方式尝试,请参阅以下链接:WPF - Animate ListBox.ScrollViewer.HorizontalOffset?