FrameworkPropertyMetadataOptions.AffectsParentArrange en la interfaz de usuario de Avalonia?

Al declarar una propiedad en WPF, puede establecer metadatos como este

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

En la interfaz de usuario de Avalonia, no hay ningún parámetro para establecer metadatos

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

¿Cuál es el equivalente de FrameworkPropertyMetadataOptions.AffectsParentArrange?

Answer

La forma más sencilla de hacer que una propiedad afecte la disposición del control en sí es agregar una llamada al AffectsArrangeconstructor estático de su control:

static MediaPlayer()
{
    AffectsArrange(IsStopVisibleProperty);
}

Sin embargo, este es el equivalente de la FrameworkPropertyMetadataOptions.AffectsArrangebandera de WPF, no AffectsParentArrange. Es bastante inusual que la propiedad de un control afecte directamente la organización del control principal: el escenario AffectsParentArrangegeneralmente se limita a las propiedades adjuntas en los Panelcontroles. Debido a esto, Avalonia AffectsParentArrangees un método protegido, por Panello que probablemente no estará disponible bajo su control.

Sin embargo, si está seguro de que necesita invalidar el arreglo principal en el cambio de propiedad, probablemente la mejor manera de hacerlo sería simplemente invalidar el arreglo principal en OnPropertyChanged:

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

            base.OnPropertyChanged(change);
        }