使用名称来查找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>

来源:oschina
链接:https://my.oschina.net/u/4382484/blog/3512839