C# WPF派生形状在属性更改时触发重画

C# WPF派生形状在属性更改时触发重画,c#,wpf,shape,redraw,C#,Wpf,Shape,Redraw,我有一个圆形进度条,我将其实现为一个从Shape派生的类。我为所有需要绑定的属性添加了dependencProperties。属性值表示进度。我覆盖了定义几何体 现在我想让进度条在Value更改时反映更改。我当前的方法是在激发shape.InvalidateVisual()的DependencyProperty上注册PropertyChangedCallback 这很好,除非我的进度条上有工具提示。计时器增加值,并且工具提示闪烁一次 更新形状的正确方法是什么?事实证明,闪烁是由扩展的可观察采集触

我有一个圆形进度条,我将其实现为一个从
Shape
派生的类。我为所有需要绑定的属性添加了
dependencProperties
。属性
表示进度。我覆盖了
定义几何体

现在我想让进度条在
Value
更改时反映更改。我当前的方法是在激发
shape.InvalidateVisual()
DependencyProperty
上注册
PropertyChangedCallback

这很好,除非我的进度条上有
工具提示。
计时器
增加
,并且
工具提示
闪烁一次


更新形状的正确方法是什么?

事实证明,闪烁是由扩展的
可观察采集触发的,该采集将生成一个
NotifyCollectionChangedAction.Reset
事件,该事件触发了包含
形状

接下来,我将我的
dependecyProperty
改进为:

    public static readonly DependencyProperty StartProperty =
        DependencyProperty.Register(
            "Start",
            typeof(double),
            typeof(CircleSegment),
            new FrameworkPropertyMetadata(
                0.0,
                FrameworkPropertyMetadataOptions.AffectsRender));

    /// <summary>
    /// Start of the Segment. 0 is top (12 o'clock), 0.25 is right (3 o'clock), 0.25 is bottom (6 o'clock), 0.75 is left (9 o'clock).
    /// Painting is always Clockwise from Start to End.
    /// </summary>
    [TypeConverter(typeof(LengthConverter))]
    public double Start
    {
        get { return (double)GetValue(StartProperty); }
        set { SetValue(StartProperty, value); }
    }
公共静态只读从属属性StartProperty=
从属属性。寄存器(
“开始”,
类型(双),
类型(圆圈段),
新框架属性元数据(
0.0,
FrameworkPropertyMetadataOptions.AffectsRender));
/// 
///段的开头。0表示顶部(12点钟),0.25表示右侧(3点钟),0.25表示底部(6点钟),0.75表示左侧(9点钟)。
///绘画始终是顺时针从开始到结束。
/// 
[TypeConverter(typeof(LengthConverter))]
公共双启动
{
获取{return(double)GetValue(StartProperty);}
set{SetValue(StartProperty,value);}
}