【问题标题】:wpf - vb - animating gridsplitter / dock panelwpf - vb - 动画 gridsplitter / 停靠面板
【发布时间】:2012-10-23 10:09:04
【问题描述】:

这与我之前的问题有关 - 我想为网格拆分器设置动画(使面板滑入/滑出视图)。我们非常擅长 VB,并且已经有一个 VB 项目,所以如果可以的话,我们希望继续使用 VB,但大多数 WPF 示例似乎都是在 XAML 或 CS 中。

我有一些简单的 VB 动画代码可以工作,但是:

当然,需要动画的是网格列/行的宽度/高度,这不是依赖属性。我在 CS 中发现了一些巧妙的东西来创建依赖属性,但无法将其转换为 vb。所以我找到了一个简单的解决方法,即在网格单元格中为停靠面板设置动画,捕捉它的大小更改事件并使用这些来设置单元格网格大小。它有效,但我想知道它是否效率较低,因为有两件事是分开改变的?我还必须(当动画完成时)将网格单元格大小设置回 * 以正确的比例,并将停靠面板大小设置回自动。

它可以工作,但似乎有点笨拙 - 有人有直接从 VB 制作网格动画的示例,还有其他建议吗?

谢谢

【问题讨论】:

  • 如果问题是您无法理解 C# 示例,那么有一个转换器...developerfusion.com/tools/convert/csharp-to-vb...虽然 C# 是一种很好理解的语言。 :-)
  • 实际上,这解决了我的问题,在 cs 示例中为我提供了 vb 中可用的依赖属性代码 - 非常感谢

标签: wpf


【解决方案1】:

作为参考,这里是用于为 gridsplitter 设置动画的依赖属性的 VB 代码:

Public Class GridLengthAnimation
Inherits AnimationTimeline
Public Sub New()
End Sub

Public Property From() As GridLength
    Get
        Return DirectCast(GetValue(FromProperty), GridLength)
    End Get
    Set(value As GridLength)
        SetValue(FromProperty, value)
    End Set
End Property

Public Shared ReadOnly FromProperty As DependencyProperty 
  = DependencyProperty.Register("From", GetType(GridLength), 
      GetType(GridLengthAnimation))

Public Property [To]() As GridLength
    Get
        Return DirectCast(GetValue(ToProperty), GridLength)
    End Get
    Set(value As GridLength)
        SetValue(ToProperty, value)
    End Set
End Property

Public Shared ReadOnly ToProperty As DependencyProperty 
   = DependencyProperty.Register("To", GetType(GridLength), 
        GetType(GridLengthAnimation))

Public Overrides ReadOnly Property TargetPropertyType() As Type
    Get
        Return GetType(GridLength)
    End Get
End Property

Protected Overrides Function CreateInstanceCore() As Freezable
    Return New GridLengthAnimation()
End Function

Public Overrides Function GetCurrentValue
      (defaultOriginValue As Object, 
       defaultDestinationValue As Object, 
       animationClock As AnimationClock) As Object
    Dim fromValue As Double = Me.From.Value
    Dim toValue As Double = Me.[To].Value

    If fromValue > toValue Then
        Return New GridLength((1 - animationClock.CurrentProgress.Value) 
             * (fromValue - toValue) + toValue, 
                If(Me.[To].IsStar, GridUnitType.Star, GridUnitType.Pixel))
    Else
          Return New GridLength((animationClock.CurrentProgress.Value) * 
                (toValue - fromValue) + fromValue, 
                   If(Me.[To].IsStar, GridUnitType.Star, GridUnitType.Pixel))
    End If
End Function
End Class

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2013-10-15
    • 2018-11-16
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多