zoukankan      html  css  js  c++  java
  • FrameworkPropertyMetadataOptions.Inherits 属性沿袭

    今天研究了下属性的沿袭(DependencyProperty Inherit),研究之后和原来想象的有些出入:

    假如我有一个自定义的Button, ClickedButton继承自Button控件,又增加了一个DependencyProperty(设计成可继承的), IsClicked。在XAML里面,假如我把Button的Content设置成TextBlock的话,按照以前的想法,TextBlock会有ClickedButton.IsClicked的属性,而实际情况是没有!

    所以总结下来,假如你增加了一个新的DP,这个DP就算设置成可沿袭的,默认的控件依然不会自动沿袭这个属性。只有一种情况,可以让你的DP被沿袭,那就是在其他DependencyObject里面也实现这个DP,而且用AddOwner进行注册!(代码在文章最后会有)。同时需要注意的是,假如你的DP的MetaData没有“可沿袭”的属性,那么不管你是其他控件的儿子或者是父亲,你DP的属性也不会得到或者被沿袭。

    4/17日更新:假如父类对某一个DP进行了AddOwner的操作,那么子类也会继承这个DP。

     

        public class ClickButton : Button
        {
            public static readonly DependencyProperty IsClickedProperty =
            DependencyProperty.Register("IsClicked", typeof(bool),
            typeof(ClickButton), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender, null, null, false, UpdateSourceTrigger.PropertyChanged));
            public bool IsClicked
            {
                set { SetValue(IsClickedProperty, value); }
                get { return (bool)GetValue(IsClickedProperty); }
            }
            protected override void OnClick()
            {
                IsClicked = !IsClicked;
    
                base.OnClick();
            }
        }
    
    
        public class ClickButton2 : Button
        {
            public static readonly DependencyProperty IsClickedProperty;
    
            static ClickButton2()
            {
                IsClickedProperty =
                    ClickButton.IsClickedProperty.AddOwner(typeof(ClickButton2));
    
                FrameworkPropertyMetadata meta = new FrameworkPropertyMetadata();
                meta.Inherits = true;
    
                IsClickedProperty.OverrideMetadata(typeof(ClickButton2), meta);
            }
    
            protected override void OnClick()
            {
                IsClicked = !IsClicked;
    
                base.OnClick();
            }
    
            public bool IsClicked
            {
                set { SetValue(IsClickedProperty, value); }
                get { return (bool)GetValue(IsClickedProperty); }
            }
        }



     

  • 相关阅读:
    bzoj1615 [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
    bzoj3402 [Usaco2009 Open]Hide and Seek 捉迷藏
    CF B. Planning The Expedition
    Codeforces ~ 1009C ~ Annoying Present (贪心)
    Codeforces Round#498(Div.3)D. Two Strings Swaps
    牛客Another Distinct Values
    牛客多校第四场 G Maximum Mode
    可持化永久树 的 STL ( rope )
    KMP算法 (字符串的匹配)
    求(3+开根5) N次方的整数部分最后3位
  • 原文地址:https://www.cnblogs.com/puncha/p/3877035.html
Copyright © 2011-2022 走看看