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

Style DataTrigger not updating Custom Control Dependency Property

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

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

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

<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>

但是,尝试将 SegmentCount 属性 设置回 0 的 "False" DataTrigger 似乎没有更新视图。如果我也像这样设置 Stroke 属性(我不想这样做)

<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"/>
            <Setter Property="Stroke" Value="Green"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

看起来一切顺利,我得到了预期的视图,尽管现在颜色不对。在这种情况下,我的 Dependency 属性 没有更新视图是否有原因?我是否必须告诉框架它已更改类似于 RaiseNotifyProperty 更改事件?

没有 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));