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

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

依赖属性是具有一个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=""
d:DesignWidth=""> <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(, , (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="" x:Name="U" IsOpenZoom="True" />

c#直接添加就是

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

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

UWP &WP8.1 依赖属性和用户控件 依赖属性简单使用 uwp添加UserControl的更多相关文章

  1. 对用户控件(ascx)属性(property)赋值

    对用户控件(ascx)属性(property)赋值 Insus.NET写此博文,是对用户控件(ASCX)的属性赋值经验与技巧分享.是这样子的,在做新闻站点时,一般都会有分很多类别. 在站点首页会显示最 ...

  2. wpf中用户控件的属性重用

    我们经常会抽取一些可重用的控件,某个属性是否需要重用,直接决定了这个属性的绑定方式. 1.完全不可重用的控件 有一些与业务强相关的控件,它们的属性完全来自ViewModel,越是相对复杂的控件,越容易 ...

  3. 用户控件的设计要点 System.Windows.Forms.UserControl

    用户控件的设计要点 最近的项目中有一个瀑布图(彩图)的功能,就是把空间和时间上的点量值以图的形式呈现出来,如下图: X坐标为空间,水平方向的一个像素代表一个空间单位(例如50米) Y坐标为时间,垂直方 ...

  4. SharePoint用户控件编写的简单介绍

    转:http://www.it165.net/design/html/201204/1131.html 我们开发中,通常需要写各种各样的部件来实现我们的展示或者功能,下面就介绍下刚刚接触的QuickP ...

  5. SharePoint 用户控件编写的简单介绍

    我们开发中,通常需要写各种各样的部件来实现我们的展示或者功能,下面就介绍下刚刚接触的QuickPart+用户控件的方式,算是自己的学习笔记,也和大家交流下心得. 1. 新建Web应用程序 2. 在项目 ...

  6. c# 用户控件,usercontrol,自定义控件属性

    1.C#用户控件的使用 2.拖动添加:画面上如需多个usercontrol,添加TableLayoutPanel,然后在工具箱中找到usercontrol,拖到相应框中 3.代码添加:主窗口中有多个T ...

  7. WPF自定义控件(五)の用户控件(完结)

    用户控件,WPF中是继承自UserControl的控件,我们可以在里面融合我们的业务逻辑. 示例:(一个厌恶选择的用户控件) 后端: using iMicClassBase; using iMicCl ...

  8. WPF之路——用户控件对比自定义控件UserControl VS CustomControl)

    将多个现有的控件组合成一个可重用的“组”. 由一个XAML文件和一个后台代码文件. 不能使用样式和模板. 继承自UserControl类. 自定义控件(扩展) 在现有的控件上进行扩展,增加一些新的属性 ...

  9. 033. asp.netWeb用户控件之二将页面转换成web控件和使用Web控件显示热点新闻

    访问Web用户控件的属性 ASP.NET提供的各种服务器控件都有其自身的属性和方法,程序开发人员可以灵活地使用服务器控件中的属性和方法开发程序.在用户控件中,程序开发人员也可以自行定义各种属性和方法, ...

随机推荐

  1. poj 3421 X-factor Chains——质因数分解

    题目:http://poj.org/problem?id=3421 记忆化搜索竟然水过去了.仔细一想时间可能有点不对,但还是水过去了. #include<iostream> #includ ...

  2. java代码继承super

    总结:多态 :. 当重写父类的方法的时,子类对象名可以调用父类的方法,以及不带参的构造方法 package com.addd; public class rr { int a, b; String c ...

  3. Fork/Join框架介绍

    转http://www.infoq.com/cn/articles/fork-join-introduction/ 1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用 ...

  4. Runnable、Callable、Future和FutureTask之一:基本用法

    Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理.Thread类.Runnable接口和Java内存管理模型使得多线程编程简单直接.但正如之前提到过的,Thre ...

  5. rem怎么计算

    px:相对长度单位.像素px是相对于显示器屏幕分辨率而言的 em:相对单位,继承父节点(层层继承,传递)基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px ...

  6. 如何在C#中读写INI文件

    INI文件就是扩展名为"ini"的文件.在Windows系统中,INI文件是很多,最重要的就是"System.ini"."System32.ini&q ...

  7. 开发环境入门 linux基础 (部分)while for 函数 计划任务

    while循环 while do 动作 done 需要无限循环时我们会选择while : echo -e 格式处理,将\n的意义不变. exit 指退出执行程序 break 指跳出本层循环 conti ...

  8. Mysql如何将一张表重复数据删除

    MySQL无法select 和 delete,update同时进行 只有将group By 出来不重复的数据进行insert到一张和之前同样类型的新表里面 转换思路,解决问题!​​

  9. 2018网络预选赛 徐州H 线段树+树状数组

    设读入的数组是a,树状数组用来维护a数组区间和sum,线段树用来维护一个另一个数组ssum的区间和,区间每个点a[i]*(n-i+1),那么l-r的答案是l-r的ssum-(n-r)*(sum[r]- ...

  10. 2018多校第九场1010 (HDU6424) 数学

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6424 解法:找规律.因为最多三项,a1^a2^a3可以拆成(a1+2)+(a2+1)*a3,然后建成数 ...