c# - Avalonia UI 中的 FrameworkPropertyMetadataOptions.AffectsParentArrange?
问题描述
在 WPF 中声明属性时,可以像这样设置元数据
public static readonly DependencyProperty IsStopVisibleProperty =
DependencyProperty.Register("IsStopVisible", typeof(bool), typeof(MediaPlayer),
new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsParentArrange));
在 Avalon UI 中,没有设置元数据的参数
public static readonly StyledProperty<bool> IsStopVisibleProperty =
AvaloniaProperty.Register<MediaPlayer, bool>(nameof(IsStopVisible), true);
FrameworkPropertyMetadataOptions.AffectsParentArrange 的等价物是什么?
解决方案
使属性影响控件本身排列的最简单方法是AffectsArrange
在控件的静态构造函数中添加调用:
static MediaPlayer()
{
AffectsArrange(IsStopVisibleProperty);
}
但是,这相当于 WPF 的FrameworkPropertyMetadataOptions.AffectsArrange
标志,而不是AffectsParentArrange
. 控件的属性直接影响父控件的排列是很不寻常的——这种情况AffectsParentArrange
通常仅限于Panel
控件上的附加属性。因此,AvaloniaAffectsParentArrange
是一种受保护的方法,Panel
因此您可能无法控制。
但是,如果您确定需要在属性更改时使父安排无效,那么最好的方法可能是简单地使父安排无效OnPropertyChanged
:
protected override void OnPropertyChanged<T>(AvaloniaPropertyChangedEventArgs<T> change)
{
if (change.Property == IsStopVisibleProperty)
{
((Control)Parent)?.InvalidateArrange();
}
base.OnPropertyChanged(change);
}
推荐阅读
- jenkins - Slack 命令 URL 无法通过 Web 浏览器运行
- chromium-embedded - “无法打开 X 显示器”错误是由在无窗口(离屏渲染)模式下运行的 CEF 应用程序产生的
- ruby-on-rails - 使用 webpack / react 未在生产中应用的打印样式
- android - “AWT-Windows”java.lang.InternalError:不支持的屏幕深度
- java - 使用自己的 fxml 和控制器在不同场景之间切换
- postgresql - 返回具有最新时间戳的唯一分组行
- google-cloud-platform - 如何在 GCP 中限制为组织/域下的用户分配的积分?
- firebase - 使用 FCM 向 iOS 设备推送通知时遇到问题
- php - Docker nginx + php-fpm 配置主机?
- sql - 如何执行此 SQL 查询?