zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    退役了
    Luogu1835 素数密度_NOI导刊2011提高(04
    Luogu1941 飞扬的小鸟
    Luogu4711 「化学」相对分子质量
    CF285E Positions in Permutations
    JZOJ 5944
    BZOJ3827: [Poi2014]Around the world && CF526E Transmitting Levels
    BZOJ3831: [Poi2014]Little Bird
    CF526F Pudding Monsters
    运算符重载
  • 原文地址:https://www.cnblogs.com/T-ARF/p/10968441.html
Copyright © 2011-2022 走看看