我需要实现一个标尺,并且我有一个从Control派生的CustomControl RangeSlider,并且有几个DependencyProperties(例如Minimum,Maximum,LowerValue,UpperValue)。Silverlight/WPF:DependencyProperty.AddOwner&Render on change
public static readonly DependencyProperty LowerValueProperty =
DependencyProperty.Register("LowerValue",
typeof(double),
typeof(RangeSlider),
new FrameworkPropertyMetadata(0d, OnLowerValueChanged, CoerceLowerValue));
public double LowerValue
{
get { return (double)base.GetValue(LowerValueProperty); }
set { base.SetValue(LowerValueProperty, value); }
}
在Xaml中,标尺有一个子控件Scale(从Canvas派生),它需要相同的属性来绘制缩放。如果LowerValue或UpperValue更改,则Scale应重绘。所以我加
public static readonly DependencyProperty LowerValueProperty =
RangeSlider.LowerValueProperty.AddOwner(typeof(Scale), new FrameworkPropertyMetadata(1d));
当我移动拇指时,应该在Scale中提高一些东西。首先我实现了OnRender(DrawingContext)并将其添加到RangeSlider FrameworkPropertyMetadataOptions中的LowerValueProperty。但没关系,没有任何反应。此外,我不想使用OnRender(DrawingContext),因为它在Silverlight中不可用。
此外,我想知道为什么在RangeSlider中的OnLowerValueChanged方法被引发,但不是LowerValue的setter(至少调试器没有在那里打破)。
那么,有没有办法让Silverlight & WPF在Scale中自动调出一个方法,当RangeSlider中的LowerValue发生变化(除了从OnLowerValueChanged上升)?
注意:上面的代码是WPF代码。在Silverlight中,当然有一些区别,因为Silverlight不支持强制。
因为代码应该在Silverlight和WPF中运行,所以我不想使用OnRender(DrawingContext)。
重新二传手不点火:绑定到依赖属性是通过的SetValue()幕后。 Setter/Getter作为你的帮手(我想也可以用于Xaml解析器)。 –