zoukankan      html  css  js  c++  java
  • 附加属性

    自定义属性

    Visual Studio 快捷方式:prop;

    public int MyProperty { get; set; }
    

    附加属性

    附加是一种特殊的依赖属性。它允许给一个对象添加一个值,而该对象可能对这个值一无所知。
    对控件非依赖属性的扩展,实现对非依赖属性的操作。
    附加属性最常见的例子就是布局容器中DockPanel类中的Dock附加属性和Grid类中Row和Column附加属性。

    定义

    Visual Studio 快捷方式:propa;

    public class OneControlHelper
    {
        public static string GetMyProperty2(DependencyObject obj)
        {   
            return (string)obj.GetValue(MyProperty2Property);
        }
        public static void SetMyProperty2(DependencyObject obj, string value)
        {
            obj.SetValue(MyProperty2Property, value);
        }
        public static readonly DependencyProperty MyProperty2Property =
            DependencyProperty.RegisterAttached("MyProperty2", typeof(string), typeof(ownerclass), new PropertyMetadata("", OnMyProperty2Changed));
    
        private static void OnMyProperty2Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            if (d is OneControl control)
            {
                control.PropertyName = e.NewValue;
            }
        }
    }
    
    

    依赖属性

    自定义的依赖属性可以绑定控件的依赖属性,实现控件的同步操作。

    依赖属性与自定义属性的区别

    当属性变化要执行一段动画 或者要动态加载、生成或布局模板中的子控件时,使用注册依赖属性,其他情况,可以使用普通自定义的.NET属性,也可以使用注册依赖属性,一般使用普通属性,这样简便一些。

    定义

    Visual Studio 快捷方式:propdp;

    public class OneControlEx : UserControl / OneControl
      /// <summary>
      /// 属性值
      /// </summary>
      public double MyProperty3
      {
          get { return (double)GetValue(MyProperty3Property); }
          set { SetValue(MyProperty3Property, value); }
      }
      public static readonly DependencyProperty MyProperty3Property =
          DependencyProperty.Register("MyProperty3", typeof(double), typeof(ownerclass), new PropertyMetadata(0d, OnValueChanged));
    
      //public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("MyProperty3", typeof(double), typeof(ownerclass), 
      //    new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(OnValueChanged)));
    
      private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
      {
          // 当对控件扩展时(OneControlEx),可以实现复杂的行为
          (d as ownerclass).Update();
      }
      private void Update()
      {
          // TODO
      }
    }
    
  • 相关阅读:
    Python之while循环
    Python之分支语句
    Python之变量
    Python开挂的吧!
    xshell 连接 ubuntu 16.04报错
    js中的script标签
    javascript中的事件学习总结
    【JAVAWEB学习笔记】04_JavaScript
    【JAVAWEB学习笔记】03_JavaScript
    【JAVAWEB学习笔记】02_HTML&CSS
  • 原文地址:https://www.cnblogs.com/wesson2019-blog/p/13294983.html
Copyright © 2011-2022 走看看