2012-10-23 58 views
0

這與我以前的問題有關 - 我想爲網格分割器設置動畫(使面板滑入/滑出視圖)。我們非常擅長VB,並且已經有了一個VB項目,所以如果可以的話,我們會盡量留在VB中,但是大多數WPF示例似乎都在XAML或CS中。wpf - vb - 動畫網格劃分器/底座面板

我有一些簡單的VB動畫代碼的工作,但:

當然,需要採取什麼動畫是格列/行的寬度/高度,這不是一個依賴項屬性。我在CS中發現了一些聰明的東西來創建依賴屬性,但無法將其轉換爲vb。所以我找到了一個簡單的解決方法,即在網格單元格中設置一個dockpanel的動畫,捕捉大小改變的事件並使用它們來設置單元格的大小。它有效,但我不知道它是否效率較低,因爲兩件事情正在分別改變?另外,我必須(當動畫完成時)將網格單元大小設置回*,並且DockPanel大小恢復爲自動。

它的工作,但它似乎有點笨拙 - 有人有一個例子,直接從VB的網格工作的動畫任何其他建議?

感謝

+1

如果問題是你的** ** unability瞭解C#的樣品再有一個轉換器... http://www.developerfusion.com/tools/convert/csharp-to-vb/ ...雖然C#是一種很好理解的語言。 :-) –

+0

實際上,這解決了我的問題,給出了可用的依賴屬性代碼在VB中從CS示例 - 非常感謝 – Ianb

回答

0

僅供參考,這裏是一個依賴屬性的VB代碼動畫一個gridsplitter:

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