【问题标题】:FrameworkPropertyMetadataOptions.AffectsParentArrange in Avalonia UI?Avalonia UI 中的 FrameworkPropertyMetadataOptions.AffectsParentArrange?
【发布时间】:2021-11-17 04:56:39
【问题描述】:

在 WPF 中声明属性时,可以像这样设置元数据

public static readonly DependencyProperty IsStopVisibleProperty = 
    DependencyProperty.Register("IsStopVisible", typeof(bool), typeof(MediaPlayer),
    new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsParentArrange));

在 Avalonia UI 中,没有设置元数据的参数

public static readonly StyledProperty<bool> IsStopVisibleProperty = 
    AvaloniaProperty.Register<MediaPlayer, bool>(nameof(IsStopVisible), true);

FrameworkPropertyMetadataOptions.AffectsParentArrange 的等价物是什么?

【问题讨论】:

    标签: c# .net avaloniaui


    【解决方案1】:

    使属性影响控件本身排列的最简单方法是在控件的静态构造函数中添加对AffectsArrange 的调用:

    static MediaPlayer()
    {
        AffectsArrange(IsStopVisibleProperty);
    }
    

    但是,这相当于 WPF 的 FrameworkPropertyMetadataOptions.AffectsArrange 标志,而不是 AffectsParentArrange。控件的属性直接影响父控件的排列是很不寻常的——AffectsParentArrange 的场景通常仅限于Panel 控件上的附加属性。因此,Avalonia 的 AffectsParentArrangePanel 上的受保护方法,因此您可能无法控制。

    但是,如果您确定需要在属性更改时使父安排无效,那么最好的方法可能是简单地使 OnPropertyChanged 中的父安排无效:

            protected override void OnPropertyChanged<T>(AvaloniaPropertyChangedEventArgs<T> change)
            {
                if (change.Property == IsStopVisibleProperty)
                {
                    ((Control)Parent)?.InvalidateArrange();
                }
    
                base.OnPropertyChanged(change);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多