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);}
}