使用名称来查找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>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/12646.html