2013-12-12 43 views
1

我到處找,所以如果我做一個雙張貼,請原諒我。Silverlight運行時綁定到自定義依賴對象

我需要一個邊境管制的ActualHeight屬性的綁定。我用這篇文章開始: Binding to ActualWidth does not work

這反過來又帶我到這個博客: http://darutk-oboegaki.blogspot.com/2011/07/binding-actualheight-and-actualwidth.html

,我已經實現了一個班的SizeChange和所有的代碼的土地看起來不錯。

正在運行時創建我的控制,所以我創建了控制,並添加一個物業「的IsEnabled」爲每XAML基於代碼

border.SetValue(SizeChange.IsEnabledProperty, true); 

我已經調試代碼檢查,它是正確更新SizeChange.ActualHeight。接下來,我想創建的控制另一個運行時綁定到這一個:

Binding weekHeight = new Binding("SizeChange.ActualHeight"); 
weekHeight.Mode = BindingMode.OneWay; 
weekHeight.Source = border; 
border2.SetBinding(Border.HeightProperty, weekHeight); 

現在XAML基礎的解決方案要求的綁定的「local_ui:SizeChange.ActualHeight」,但會導致運行時錯誤,如果我嘗試,相反,我使用了「SizeChange.ActualHeight」,但它不會更新控件的大小。

我試圖讓事情變得簡單的,所以請原諒我,如果我錯過了什麼。

非常感謝!

+0

爲什麼你需要一個實際的高度?你想達到什麼目的? – Bas

+0

漂亮的技術,順便說一句 - 不錯的發現! – McGarnagle

+0

邊界控制ActualHeight不會更新Silverlight錯誤,因此需要解決此問題,因爲另一個控件需要將其高度設置爲相同。 – Storm

回答

2

所以問題是(實質上)如何綁定代碼隱藏的自定義附加屬性。訣竅是使用PropertyPath來設置綁定路徑,而不是字符串。使用實際的依賴屬性(SizeChange.ActualHeightProperty),這樣構建的:

binding.Path = new PropertyPath(SizeChange.ActualHeightProperty); 

所以結合構造應該是這樣的:

Binding weekHeight = new Binding 
{ 
    Path = new PropertyPath(SizeChange.ActualHeightProperty), 
    Mode = BindingMode.OneWay, 
    Source = border 
}; 
border2.SetBinding(Border.HeightProperty, weekHeight); 
+0

哦......我的......天啊......難以如此血腥的聰明?!我很親密,但迄今爲止......非常感謝你,我真的不知道你們是如何憑空吸取這些東西的。真的很感謝幫助! – Storm

相關問題