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,获取值并且转换其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相关推荐
- 自定义用户控件显示属性分类、描述、默认值
在网上查了相关资料,大概例子如下: using System.ComponentModel; bool _IsCheck = true; [Bindable(true), DefaultVal ...
- ASP.NET 实践:使用用户控件实现 Web 部件的个性化
这个实践示范了如何创建依赖于 Web 部件个性化的 ASP.NET 用户控件,并在 Web 页面中提供用户特定的默认值. ASP.NET Web 部件控件集允许你建立拥有模块化布局的 Web 页面,并 ...
- 用户控件和服务器控件的数据绑定
一.绑定Repeater控件的数据源 aspx.cs文件中绑定Repeater控件的数据源在BindDataSource()中: protected override void BindDataSou ...
- ASP.NET重用代码技术 - 用户控件技术
作者: 苏红超 使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行.我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一 ...
- 一步一步学Silverlight 2系列(10):使用用户控件
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- ASP.NET的用户控件
本文介绍如何在ASP.NET中创建用户控件,控件属性的动态修改以及控件的事件出发机制. 简介 ASP.NET的服务端控件使得Web开发工作变得更为简单,功能更为强大.我们介绍过如何在ASP.NET页面 ...
- 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 ...
- 站点某些网页想显示母版页内的用户控件,某些网页不想显示,怎样实现
"我有一个站点,这个站点使用了masterpage,还两个用户控件(ascx),是拉至masterpage内的,一个是作为网页首(Header.ascx),另一个作为网页脚(Foot.asc ...
- (转) ASP.NET 2.0:使用用户控件和定制的Web部件个人化你的门户网站(二)
Web部件目录 我们已经见过了如何在 WebPartZones 控件中事先放入Web部件.你还可以用另外一种方法完成这个功能,那就是允许用户在运行时添加新的Web部件.通过使用 CatalogZone ...
最新文章
- 我的linux Mint之路(三)
- java 入门 第三季1
- 2005国际通信展将于10月18-22日举行
- 转,数组遍历的三种方式
- linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A
- linux无法安装php-fpm,Linux下的php-fpm相关问题解决
- stm32定时2通道3映射_stm32学习笔记之问题总结
- 产业链人士:苹果明年将推出OLED屏iPad
- webpack搭建服务器,随时修改刷新
- JAVA 并发编程实践 - 原子变量与非阻塞同步机制 笔记
- 【干货】前端单元测试入门
- Coolite 开发心得
- 关联分析---Apriori算法和FPGrowth算法挖掘规则计算频繁项间的置信度
- TeeChart.NET 2022.4.8 专业版-Crack
- 浏览器全球的书签都在这里了,看看有没有你的!
- Uniapp打iOS离线包到出ipa安装思路
- 如何做好软件可靠性测试?
- 交叉编译openssl
- com调用excel后,进程未关闭解决方案
- 王者荣耀苹果微信多久更新服务器,8月23日王者荣耀ios版更新不了一直显示维护怎么回事 王者荣耀苹果手机微信区一直显示维护...