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