2013-12-12 39 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

相关问题