c# - 在 UserControl 中注册附加属性
问题描述
我正在尝试创建一个 UserControl 来公开其他 2 个控件 UI 和 Host,以便我可以使用 MediaPlayerWpf 并在设计器中设置属性,例如 UI.AllowPause 和 Host.Volume
我了解附加属性是我需要的。此外,我需要允许设置主机,而 UI 仅公开其属性但不能更改。
我无法在设计器中显示属性 UI 和主机。我究竟做错了什么?
public partial class MediaPlayerWpf {
public MediaPlayerWpf() {
InitializeComponent();
SetUI(this, MediaUI);
}
public static DependencyPropertyKey UIPropertyKey = DependencyProperty.RegisterAttachedReadOnly("UI", typeof(PlayerControls), typeof(MediaPlayerWpf), new PropertyMetadata(null));
public static DependencyProperty UIProperty = UIPropertyKey.DependencyProperty;
public PlayerControls UI { get => (PlayerControls)base.GetValue(UIProperty); private set => base.SetValue(UIPropertyKey, value); }
[AttachedPropertyBrowsableForType(typeof(MediaPlayerWpf))]
public static PlayerControls GetUI(UIElement element) {
return (PlayerControls)element.GetValue(UIProperty);
}
public static void SetUI(UIElement element, PlayerControls value) {
element.SetValue(UIPropertyKey, value);
}
public static DependencyProperty HostProperty = DependencyProperty.RegisterAttached("Host", typeof(PlayerBase), typeof(MediaPlayerWpf), new PropertyMetadata(null, OnHostChanged));
public PlayerBase Host { get => (PlayerBase)base.GetValue(HostProperty); set => base.SetValue(HostProperty, value); }
private static void OnHostChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
MediaPlayerWpf P = d as MediaPlayerWpf;
if (e.OldValue != null)
P.HostGrid.Children.Remove(e.OldValue as PlayerBase);
if (e.NewValue != null) {
P.HostGrid.Children.Add(e.NewValue as PlayerBase);
GetUI(P).PlayerHost = e.NewValue as PlayerBase;
}
}
[AttachedPropertyBrowsableForType(typeof(MediaPlayerWpf))]
public static PlayerBase GetHost(UIElement element) {
return (PlayerBase)element.GetValue(HostProperty);
}
public static void SetHost(UIElement element, PlayerBase value) {
element.SetValue(HostProperty, value);
}
}
解决方案
推荐阅读
- python - 在python中用不同的方法计算优势比
- kotlin - 如何将 for 循环转换为 Kotlin 中的列表函数
- python - 验证来自 Spring Boot 应用程序的令牌 - [OAuth2]
- vue.js - Laravel Inertia 中的 Vue mixins
- docker - 如何在 Docker 中更改 Python 默认版本?
- python - PyQt5 在线编辑需要帮助
- javascript - React setState 未在 GET 请求上更新,有时有效
- android - Kotlin 中的 UICollectionViews?
- javascript - Highcharts 对系列数据进行排序并重绘
- git - 无法使用 ssh 使用 git 从 KIE 工作台克隆存储库