WPF 通过名称查找属性(DependencyProperty)
Posted lonelyxmas
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 通过名称查找属性(DependencyProperty)相关的知识,希望对你有一定的参考价值。
原文:WPF 通过名称查找属性(DependencyProperty)
使用名称来查找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); } }
Xaml 代码
<Grid Grid.Row="1" Background="Red" ado:AniInvoke.AniInvokeParameter="Width" > <ado:AniInvoke.AniInvoke> <DoubleAnimationUsingKeyFrames> <EasingDoubleKeyFrame Value="30" KeyTime="00:00:02"> <EasingDoubleKeyFrame.EasingFunction> <CubicEase EasingMode="EaseOut"/> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> <EasingDoubleKeyFrame Value="500" KeyTime="00:00:06"> <EasingDoubleKeyFrame.EasingFunction> <BounceEase Bounces="5" EasingMode="EaseOut"/> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </ado:AniInvoke.AniInvoke> </Grid>
以上是关于WPF 通过名称查找属性(DependencyProperty)的主要内容,如果未能解决你的问题,请参考以下文章