我正在做一个从FrameworkElement类派生的自定义滴答条指示符。我有一堆属性(附带的依赖项属性)定义指示器的外观和功能,例如Orientation和Range。Orientation是Orientation型,Range是double型。
从视图模型中更改Orientation将导致调用MeasureOverride()方法,允许我定义控件的新维度。但是,由于某些原因,更改Range属性不会(也不会更改其他double类型的属性)。我也搞不懂为什么。有谁知道这是为什么,以及如何让Range属性也调用MeasureOverride()
public class DepthIndicatorTickBar : FrameworkElement
{
public static readonly DependencyProperty OrientationProperty =
DependencyProperty.Register("Orientation", typeof(Orientation),
typeof(DepthIndicatorTickBar),
new FrameworkPropertyMetadata(Orientation.Horizontal,
FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty RangeProperty =
DependencyProperty.Register("Range", typeof(double),
typeof(DepthIndicatorTickBar),
new FrameworkPropertyMetadata((double)100,
FrameworkPropertyMetadataOptions.AffectsRender));
public Orientation Orientation
{
get { return (Orientation)GetValue(OrientationProperty); }
set { SetValue(OrientationProperty, value); }
}
public double Range
{
get { return (double)GetValue(RangeProperty); }
set { SetValue(RangeProperty, value); }
}
protected override Size MeasureOverride(Size availableSize)
{
Console.WriteLine("MeasureOverride");
// Calculating new size
return size;
}
protected override void OnRender(DrawingContext drawingContext)
{
Console.WriteLine("OnRender");
// Drawing control
}
}发布于 2018-04-25 08:33:06
如果要确保依赖项属性的值更改强制传递和重新呈现度量值,只需组合适当的FrameworkPropertyMetadataOptions标志:
public static readonly DependencyProperty RangeProperty = DependencyProperty.Register(
nameof(Range),
typeof(double),
typeof(DepthIndicatorTickBar),
new FrameworkPropertyMetadata(
100d,
FrameworkPropertyMetadataOptions.AffectsMeasure |
FrameworkPropertyMetadataOptions.AffectsRender));https://stackoverflow.com/questions/50017266
复制相似问题