Silverlight运行时绑定到自定义依赖项对象

时间:2013-12-12 13:16:06

标签: c# silverlight binding

我到处搜索所以如果我正在进行双重发帖,请原谅我。

我需要绑定Border Control的ActualHeight属性。我已经用这篇文章开始了: Binding to ActualWidth does not work

反过来把我带到了这个博客: http://darutk-oboegaki.blogspot.com/2011/07/binding-actualheight-and-actualwidth.html

我已经为SizeChange实现了一个Class,并且在代码领域看起来都很好。

我的控件是在运行时创建的,所以我创建了控件,并根据基于XAML的代码为“IsEnabled”添加了一个属性

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”,但它没有更新大小我的控制权。

我试图让事情保持原状,所以如果我错过了什么,请原谅我。

非常感谢!

1 个答案:

答案 0 :(得分: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 );