• UWP &WP8.1 依赖属性和用户控件 依赖属性简单使用 uwp添加UserControl


    上面说 附加属性。这章节说依赖属性。 所谓依赖属性。白话讲就是添加一个公开的属性。

    同样,依赖属性的用法和附加属性的用法差不多。

    依赖属性是具有一个get,set的属性,以及反调函数。

    首先是声明依赖属性。 依赖属性的用法如同附加属性,值得说明的是依赖属性是附加属性的”爸爸“,附加属性是依赖属性的派生。

    声明必须是使用三个关键字:public static readonly (公开的 静态的 只读的)

    之后是 依赖属性的 标识:DependencyProperty

    合起来就是 :public static readonly DependencecyProperty  XXXProperty 

    之后就是用DependencecyProperty的Register的方法,进行注册。 下面是一个例子

     public static readonly DependencyProperty OpenZoomProperty = DependencyProperty.Register
                (
                //name    要注册的依赖项对象的名称
                "IsOpenZoom",
                //propertyType    该属性的类型,作为类型参考
                typeof(bool),
                //ownerType    正在注册依赖项属性的所有者类型,作为类型参考
                typeof(UserControl),
                //defaultMetadata    属性元数据实例。这可以包含一个 PropertyChangedCallback 实现引用。
    //  都一个参数:元数据,第二个数据是反调函数【没有函数会自动注册一个】
    new PropertyMetadata(false, new PropertyChangedCallback(OnChang))
                );

    值得说的,依赖属性的表示名必须是XXX加上Property。

    下面是 DependencyProperty的Register方法的四个参数的介绍:

    名字 解释 个人理解
    name 要注册的依赖项对象的名称。 依赖属性公开的名字
    propertyType 该属性的类型,作为类型参考 这个依赖属性的类型
    ownerType 正在注册依赖项属性的所有者类型,作为类型参考 这个依赖属性属于谁
    defaultMetadata 属性元数据实例。这可以包含一个 PropertyChangedCallback 实现引用。 反调函数【是否元数据】

             ***这面说一下依赖属性和附加属性再最后一个方法的反调函数是不同,(依赖属性)一个包含两个参数,(附加属性)一个只有一个。

    这个写完声明,说第四个参数会自动注册一个函数。【接上面注册】,所谓反调函数就是你最终对某个内容或者属性的进行操作

      //这个是ScrollViewer的是否开启放大效果
    private static void OnChang(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                if (e.NewValue != null)
                {
                    SetPhoto setphoto = (SetPhoto)d;
                    switch ((bool)e.NewValue)
                    {
                        case true:
                            setphoto.scrollViewer.ZoomMode = ZoomMode.Enabled;
                            break;
                        case false:
                            setphoto.scrollViewer.ZoomMode = ZoomMode.Disabled;
                            break;
                  }                              
             }
    
            }

    下面说set get的方法,依赖属性必须有get/set或者二者。 就是一个普通的方法

     
    public bool IsOpenZoom
            {
    //get,获取值并且转换其bool
                get { return (bool)GetValue(OpenZoomProperty); }
    //或者值 并存储到上面说的依赖属性中
                set { SetValue(OpenZoomProperty, value); }
            }

    到这里 一个简单的依赖属性就结束。

    下面就是一个简单是例子,用户控件添加依赖属性。

    用户控件的目的: 可以放大缩小图片。

    依赖属性: 1.是否打开放大效果

                   2.添加图片到控件Image

                   3.指示放大倍数

    添加一个用户控件 名为SetPhoto

    *********************

    xaml页面代码:

    <UserControl 
        x:Class="水印添加M2.SetPhoto"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:水印添加M2"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="300"
        d:DesignWidth="400">
    
        <Grid>
            <ScrollViewer x:Name="scrollViewer"  HorizontalScrollBarVisibility="Auto" >
                <Image x:Name="image"/>
            </ScrollViewer>
            
        </Grid>
    </UserControl>

    之后就是后台代码:

    namespace Mode
    {
        public sealed partial class SetPhoto : UserControl
        {
            public SetPhoto()
            {
                this.InitializeComponent();
    
            }
    
            public static readonly DependencyProperty OpenZoomProperty = DependencyProperty.Register
                (
                //name    要注册的依赖项对象的名称
                "IsOpenZoom",
                //propertyType    该属性的类型,作为类型参考
                typeof(bool),
                //ownerType    正在注册依赖项属性的所有者类型,作为类型参考
                typeof(UserControl),
                //defaultMetadata    属性元数据实例。这可以包含一个 PropertyChangedCallback 实现引用。
                new PropertyMetadata(false, new PropertyChangedCallback(OnChang))
                );
    
            public static readonly DependencyProperty SetImageProperty = DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(UserControl), new PropertyMetadata(null, new PropertyChangedCallback(ImageChange)));
    
            public static readonly DependencyProperty ViewChangeProperty = DependencyProperty.Register("ViewChang", typeof(float), typeof(UserControl), new PropertyMetadata(null, new PropertyChangedCallback(ViewChang)));
    
            private static void ViewChang(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                SetPhoto s = (SetPhoto)d;
         //第一个参数 最大倍数
         //第二个参数 最小倍数
         //第三个参数 放大倍数
                s.scrollViewer.ChangeView(10, 0, (float)e.NewValue);
            }
    
            private static void ImageChange(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                SetPhoto s = (SetPhoto)d;
              // 标准Image的Source的类型 方便
                s.image.Source = (ImageSource)e.NewValue;
    
            }
    
            private static void OnChang(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                if (e.NewValue != null)
                {
                    SetPhoto setphoto = (SetPhoto)d;
                    switch ((bool)e.NewValue)
                    {
                        case true:
                            setphoto.scrollViewer.ZoomMode = ZoomMode.Enabled;
                            break;
                        case false:
                            setphoto.scrollViewer.ZoomMode = ZoomMode.Disabled;
                            break;
                  }                              
             }
    
            }
            /// <summary>
            /// 图片
            /// </summary>
            public ImageSource ImageSource
            {
                get { return (ImageSource)GetValue(SetImageProperty); }
    
                set { SetValue(SetImageProperty, value); }
            }
            public bool IsOpenZoom
            {
                get { return (bool)GetValue(OpenZoomProperty); }
    
                set { SetValue(OpenZoomProperty, value); }
            }
    
            public float ViewChange
    
            {
    
                get { return (float)GetValue(ViewChangeProperty); }
                set { SetValue(ViewChangeProperty, value); }
    
            }
    
           
        }
    }

    之后 这个SetPhoto用户控件就多了三个属性,以方便我们使用的。

    值得一说,用户控件的使用方式,只有用户控件在个你要添加的xaml页面在再同一个命名空间中 你直接使用local关键字就可以了

    <local:SetPhoto  Grid.Row="1" x:Name="U" IsOpenZoom="True" />

    c#直接添加就是

    //实例化
    SetPhoto setP=new SetPhoto();

    之后添加到 你要添加的面板控件或者其他控件中 就可以了

  • 相关阅读:
    python 利用爬虫获取页面上下拉框里的所有国家
    python3 requests 进行接口测试、爬虫使用总结
    Tomcat设置最佳线程数总结
    Java中实现对象的比较:Comparable接口和Comparator接口
    堆排序算法
    快速排序算法2---以第一个元素作为主元
    字符串匹配---暴力匹配算法
    快速排序算法
    Spring中@Autowired注解与自动装配
    Spring的注解
  • 原文地址:https://www.cnblogs.com/T-ARF/p/6568077.html
Copyright © 2020-2023  润新知