样式DataTrigger不更新自定义控件依赖项属性

时间:2019-06-06 13:11:57

标签: wpf custom-controls

我已经定义了一个自定义控件,该控件允许我绘制一系列圆弧,从而形成一个分段的圆。在此控件中,我定义了一个依赖项属性,该属性允许我设置要绘制的段数,即

if let ElapsedPercentual:Int = JSON.value(forKeyPath: "ResponseEntity.ElapsedPercentual") as? Int {
            porcentaje = ElapsedPercentual
            print(porcentaje)
    >>>     BadgeView().setCoeff(coeff: CGFloat(porcentaje)/100, animated: true)

我想根据如下定义的数据触发器在xaml中设置此属性

public int SegmentCount
{
  get => (int) GetValue( SegmentCountProperty );
  set => SetValue( SegmentCountProperty, value );
}

public static readonly DependencyProperty SegmentCountProperty =
            DependencyProperty.Register( nameof(SegmentCount), typeof( int ), typeof( MyCustomControl ), new PropertyMetadata( 1 ) );

但是,尝试将<Style x:Key="MyCustomControlStyle" TargetType="local:MyCustomControl"> <Setter Property="SegmentCount" Value="0"/> <Style.Triggers> <DataTrigger Binding="{Binding IsActive}" Value="True"> <Setter Property="SegmentCount" Value="4"/> </DataTrigger> <DataTrigger Binding="{Binding IsActive}" Value="False"> <Setter Property="SegmentCount" Value="0"/> </DataTrigger> </Style.Triggers> </Style> 属性设置回0的“ False” DataTrigger似乎没有更新视图。如果我也这样设置SegmentCount属性(我不想这样做)

Stroke

这似乎使事情进展顺利,尽管现在颜色错误,但我得到了预期的视图。在这种情况下,为什么我的Dependency属性不更新视图是否有原因?我是否必须告诉框架它已更改,类似于RaiseNotifyProperty更改事件?

1 个答案:

答案 0 :(得分:1)

没有为PropertyChangedCallback属性注册SegmentCount

它可能只是不触发渲染。尝试设置Framework​Property​Metadata​Options.AffectsRender

public static readonly DependencyProperty SegmentCountProperty =
    DependencyProperty.Register(
        nameof(SegmentCount), typeof(int), typeof(MyCustomControl),
        new FrameworkPropertyMetadata(
            1, FrameworkPropertyMetadataOptions.AffectsRender));