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

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

依赖属性是具有一个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,获取值并且转换其boolget { 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();

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

转载于:https://www.cnblogs.com/T-ARF/p/6568077.html

UWP WP8.1 依赖属性和用户控件 依赖属性简单使用 uwp添加UserControl相关推荐

  1. 自定义用户控件显示属性分类、描述、默认值

    在网上查了相关资料,大概例子如下: using System.ComponentModel; bool _IsCheck = true;     [Bindable(true), DefaultVal ...

  2. ASP.NET 实践:使用用户控件实现 Web 部件的个性化

    这个实践示范了如何创建依赖于 Web 部件个性化的 ASP.NET 用户控件,并在 Web 页面中提供用户特定的默认值. ASP.NET Web 部件控件集允许你建立拥有模块化布局的 Web 页面,并 ...

  3. 用户控件和服务器控件的数据绑定

    一.绑定Repeater控件的数据源 aspx.cs文件中绑定Repeater控件的数据源在BindDataSource()中: protected override void BindDataSou ...

  4. ASP.NET重用代码技术 - 用户控件技术

    作者: 苏红超 使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行.我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一 ...

  5. 一步一步学Silverlight 2系列(10):使用用户控件

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  6. ASP.NET的用户控件

    本文介绍如何在ASP.NET中创建用户控件,控件属性的动态修改以及控件的事件出发机制. 简介 ASP.NET的服务端控件使得Web开发工作变得更为简单,功能更为强大.我们介绍过如何在ASP.NET页面 ...

  7. web developer tips (8):创建web用户控件并包含在web页面里

    原文地址: How to create an ASP.NET Web User Control and include it in your web page 使用Visual Web Develop ...

  8. 站点某些网页想显示母版页内的用户控件,某些网页不想显示,怎样实现

    "我有一个站点,这个站点使用了masterpage,还两个用户控件(ascx),是拉至masterpage内的,一个是作为网页首(Header.ascx),另一个作为网页脚(Foot.asc ...

  9. (转) ASP.NET 2.0:使用用户控件和定制的Web部件个人化你的门户网站(二)

    Web部件目录 我们已经见过了如何在 WebPartZones 控件中事先放入Web部件.你还可以用另外一种方法完成这个功能,那就是允许用户在运行时添加新的Web部件.通过使用 CatalogZone ...

最新文章

  1. 我的linux Mint之路(三)
  2. java 入门 第三季1
  3. 2005国际通信展将于10月18-22日举行
  4. 转,数组遍历的三种方式
  5. linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A
  6. linux无法安装php-fpm,Linux下的php-fpm相关问题解决
  7. stm32定时2通道3映射_stm32学习笔记之问题总结
  8. 产业链人士:苹果明年将推出OLED屏iPad
  9. webpack搭建服务器,随时修改刷新
  10. JAVA 并发编程实践 - 原子变量与非阻塞同步机制 笔记
  11. 【干货】前端单元测试入门
  12. Coolite 开发心得
  13. 关联分析---Apriori算法和FPGrowth算法挖掘规则计算频繁项间的置信度
  14. TeeChart.NET 2022.4.8 专业版-Crack
  15. 浏览器全球的书签都在这里了,看看有没有你的!
  16. Uniapp打iOS离线包到出ipa安装思路
  17. 如何做好软件可靠性测试?
  18. 交叉编译openssl
  19. com调用excel后,进程未关闭解决方案
  20. 王者荣耀苹果微信多久更新服务器,8月23日王者荣耀ios版更新不了一直显示维护怎么回事 王者荣耀苹果手机微信区一直显示维护...

热门文章

  1. PERT I型管材与PERT II型热力管道用于供热有什么不同
  2. 黄金点游戏(结对项目)
  3. Golang 垃圾回收机制详解
  4. oracle11g初次使用教程,Oracle11g简单安装和使用教程
  5. 股票数据API接口怎么使用?
  6. JDK与JRE的安装与配置
  7. 计算机系统英语作文结尾万能句子,英语作文开头结尾万能句子
  8. minion java上传文件_Java程序猿怎样高速理解Kubernetes
  9. 四十七.c语言数组作为函数参数
  10. 基于差分进化算法的微电网调度研究(Matlab代码实现)