【问题标题】:Silverlight Runtime Binding to Custom Dependency ObjectSilverlight 运行时绑定到自定义依赖对象
【发布时间】:2013-12-30 22:17:22
【问题描述】:

我到处搜索,所以如果我要重复发布,请原谅我。

我需要一个边界控件的 ActualHeight 属性的绑定。我已经使用这篇文章开始: Binding to ActualWidth does not work

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

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

我的控件是在运行时创建的,所以我创建了控件,并根据基于 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”,它通过但它没有更新大小由我控制。

我尽量保持直截了当,所以如果我遗漏了什么,请原谅我。

非常感谢!

【问题讨论】:

  • 为什么需要实际身高?你想达到什么目的?
  • 漂亮的技术,顺便说一句 - 很好的发现!
  • 边框控件 ActualHeight 没有更新,Silverlight 错误,因此需要解决它,因为另一个控件需要将其高度设置为相同。

标签: c# silverlight binding


【解决方案1】:

所以问题是(本质上)如何从代码隐藏中绑定自定义附加属性。诀窍是使用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 );

【讨论】:

  • 哦……我的……天哪……这么聪明很难吗?!我是如此接近,但如此遥远......非常感谢,我真的不知道你们是如何凭空吸这些东西的。非常感谢您的帮助!
猜你喜欢
  • 2011-04-11
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
相关资源
最近更新 更多