Мне нужно реализовать линейку, и у меня есть CustomControl RangeSlider, который является производным от Control и имеет несколько свойств DependencyProperties (например, Minimum, Maximum, LowerValue, UpperValue).
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), которому для рисования Scaling требуются те же свойства.Если LowerValue или UpperValue изменились, Scale должен перерисоваться.Поэтому я добавляю
public static readonly DependencyProperty LowerValueProperty =
RangeSlider.LowerValueProperty.AddOwner(typeof(Scale), new FrameworkPropertyMetadata(1d));
Когда я перемещаю большой палец, что-то должно подниматься в масштабе.Сначала я реализовал OnRender (DrawingContext) и добавил к свойству LowerValueProperty в RangeSlider FrameworkPropertyMetadataOptions.Но это не имеет значения, ничего не происходит.Более того, я не хочу использовать OnRender (DrawingContext), потому что он не доступен в Silverlight.
Кроме того, мне интересно, почему вызывается OnLowerValueChanged-Method в RangeSlider, а не установщик LowerValue (по крайней мере, отладчик непрорваться туда).
Итак, есть ли способ для Silverlight и WPF автоматически вызывать метод в Scale, когда изменяется LowerValue в RangeSlider (кроме повышения из OnLowerValueChanged)?
Примечание.приведенный выше код является WPF-кодом.В Silverlight, конечно, есть некоторые различия, потому что Silverlight не поддерживает, среди прочего, Coercion.
Поскольку код должен работать в Silverlight и WPF, я не хочу использовать OnRender (DrawingContext).