使用名称来查找DependencyProperty。
如果有这样的需求,则是需要通过DependencyPropertyDescriptor来查找。
通常是使用附加属性或者依赖属性的方法。
下面给出附加属性的例子:
这个是注册附加属性,利用string来输入要查找的属性
public static readonly DependencyProperty AniInvokeParameterProperty = DependencyProperty.RegisterAttached("AniInvokeParameter", typeof(string), typeof(AniInvoke)); public static void SetAniInvokeParameter(DependencyObject d, string value) => d.SetValue(AniInvokeParameterProperty, value); public static string GetAniInvokeParameter(DependencyObject d) => (string)d.GetValue(AniInvokeParameterProperty);
具体DependencyPropertyDescriptor使用
public static readonly DependencyProperty AniInvokePropery = DependencyProperty.RegisterAttached("AniInvoke", typeof(AnimationTimeline), typeof(AniInvoke), new PropertyMetadata(null, AniInvokeCallBack)); public static void SetAniInvoke(DependencyObject d, AnimationTimeline value) => d.SetValue(AniInvokePropery, value); public static AnimationTimeline GetAniInvoke(DependencyObject d) => (AnimationTimeline)d.GetValue(AniInvokePropery); private static void AniInvokeCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e) { var t = d as FrameworkElement; var dpName = t.GetValue(AniInvokeParameterProperty) as string; if (!string.IsNullOrWhiteSpace(dpName)) { var dpd = DependencyPropertyDescriptor.FromName(dpName, t.GetType(), t.GetType()); var property = dpd.DependencyProperty; var ani = (AnimationTimeline)e.NewValue; if (property != null && ani != null) t.BeginAnimation(property, ani); } }
原文地址:https://www.cnblogs.com/T-ARF/p/10968441.html
时间: 2024-10-13 06:27:39