WPF 边距厚度

Posted

技术标签:

【中文标题】WPF 边距厚度【英文标题】:WPF Margin Thickness 【发布时间】:2011-11-06 17:35:39 【问题描述】:

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

我想使用堆栈面板的边距(左)属性将图像从右向左移动。我希望向左滚动的外观与每个图像的宽度完全相同(循环延迟 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()

似乎什么都没有发生。 本

【问题讨论】:

为什么不应用 TranslateTransform 并为其设置动画? 嗨 H.B.感谢您的评论,我正在研究它。你能建议我可以使用的任何代码吗?我正在阅读 TranslateTransform 不适合 Storyboard。 这对我来说是新闻,谁说的? ***.com/questions/2957582/… 与它不是 UIElement 有关 【参考方案1】:

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

【讨论】:

【参考方案2】:

您的另一个选择是使用水平列表框,然后您可以为 ScrollViewer 设置动画。如果您想以这种方式尝试,这里的链接可能会有所帮助:WPF - Animate ListBox.ScrollViewer.HorizontalOffset?。

【讨论】:

以上是关于WPF 边距厚度的主要内容,如果未能解决你的问题,请参考以下文章

WPF 打印中用户定义的边距

运行时的WPF窗口边距不起作用

如何在 wpf 中的内部 TextBoxView 上设置边距

WPF - 当有滚动查看器时,边距设置没有效果

如何防止VS WPF设计器在工具箱中的每个对象上放置边距

如何设置按钮的内部文本边距