首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双重类型的DependencyProperty不会导致调用MeasureOverride()

双重类型的DependencyProperty不会导致调用MeasureOverride()
EN

Stack Overflow用户
提问于 2018-04-25 08:17:11
回答 1查看 112关注 0票数 0

我正在做一个从FrameworkElement类派生的自定义滴答条指示符。我有一堆属性(附带的依赖项属性)定义指示器的外观和功能,例如OrientationRangeOrientationOrientation型,Rangedouble型。

从视图模型中更改Orientation将导致调用MeasureOverride()方法,允许我定义控件的新维度。但是,由于某些原因,更改Range属性不会(也不会更改其他double类型的属性)。我也搞不懂为什么。有谁知道这是为什么,以及如何让Range属性也调用MeasureOverride()

代码语言:javascript
复制
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
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-25 08:33:06

如果要确保依赖项属性的值更改强制传递和重新呈现度量值,只需组合适当的FrameworkPropertyMetadataOptions标志:

代码语言:javascript
复制
public static readonly DependencyProperty RangeProperty = DependencyProperty.Register(
    nameof(Range),
    typeof(double), 
    typeof(DepthIndicatorTickBar), 
    new FrameworkPropertyMetadata(
        100d, 
        FrameworkPropertyMetadataOptions.AffectsMeasure |
        FrameworkPropertyMetadataOptions.AffectsRender));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50017266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档