样式 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
属性。
它可能只是不触发渲染。尝试设置 FrameworkPropertyMetadataOptions.AffectsRender
:
public static readonly DependencyProperty SegmentCountProperty =
DependencyProperty.Register(
nameof(SegmentCount), typeof(int), typeof(MyCustomControl),
new FrameworkPropertyMetadata(
1, FrameworkPropertyMetadataOptions.AffectsRender));
我已经定义了一个自定义控件,它允许我绘制一系列弧线,从而形成一个分段的圆圈。在此控件中,我定义了一个依赖项 属性,它允许我设置要绘制的段数,即
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
属性。
它可能只是不触发渲染。尝试设置 FrameworkPropertyMetadataOptions.AffectsRender
:
public static readonly DependencyProperty SegmentCountProperty =
DependencyProperty.Register(
nameof(SegmentCount), typeof(int), typeof(MyCustomControl),
new FrameworkPropertyMetadata(
1, FrameworkPropertyMetadataOptions.AffectsRender));