附加属性,即为添加一个没有的属性的。

使用方法和依赖属性相似,个人理解就是特殊形式的依赖属性。

经常的用处,以一个简单的来说,比如一个控件的某一个属性我们想在XAML中给其绑定数据。但是我们在XAML中确实无论如何都找不到这个属性。而在后台代码确实可以使用的。那么我们就要来给它加上一个附加属性了。

OK,我们说一下附加属性的编写的方法。 刚才说附加属性是依赖属性的一种形式。但是编写方式却不同于依赖属性需要两个SET,GET访问器进行封装。只需要写两个静态公共方法来对附加属性进行读写。

下面是两个方法的编写方式

读取: public static <返回类型>Getxx[xx是附加属性的名称](目标类型)

赋值:public static void Setxx[xx是附加属性的名称](目标类型,属性值)

示例代码

//读取的是需要返回值的,括号内基本就是附加对象
public static string GetHtmlString(DependencyObject D) //赋值不需要返回值,括号内参数需要两个一个附加对象,一个添加的值
public static void SetHtmlString(DependencyObject D, string HtmlString)

说完如何添加读取值,之外就是如何注册附加属性了。

注册附加属性是需要三个修饰符, public static readonly,必须是这三个。 然后是附加对属性。之后使用附加属性的RegisterAttached方法进行注册。

附加属性的RegisterAttached内需要四个参数。

分别是:name, propertyType, ownerType, defaultMetadata

下表为解释

名字 解释
name 要注册的依赖项对象的名称。
propertyType 该属性的类型,作为类型参考
ownerType 正在注册依赖项属性的所有者类型,作为类型参考
defaultMetadata 属性元数据实例。这可以包含一个 PropertyChangedCallback 实现引用。

下面给出注册的代码

  //注册一个名为setHtmlString的附加属性,利用其.RegisterAttached方法,括号内参数分别是,要添加的属性,属性的类型,属性的所有者,以及元数据实例,且其中包含返回
public static readonly DependencyProperty setHtmlString =
DependencyProperty.RegisterAttached("HtmlString", typeof(string), typeof(MainPage), new PropertyMetadata(null, CallBack));
//自动注册名为CallBack 的方法,
private static void CallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
throw new NotImplementedException();
}

我们刚才说XAML进行绑定的时候会用到附加属性,使用的方式是 local:,这样VS就会自动出现了。

代码

到目前为止,一个简单的附加属性就可以了。但是可能是看不明白吧,所以我们要拿例子讲话。

实例:

WebView中有一个NavigateToString方法,可以加载本地的HTML字符串。我们想在前台进行绑定。但是并没有发现这个方法。所以我们要给其附加属性。

一般我们使用附加属性的时候需要新建一个类,也可以指在资源管理器中新建一个类进行编写附加属性,也可以在MainPage页面直接进行编写,但是要写在一个NameSpace。不要直接写在 MainPage()的方法内,不然啊会找不到的。不要为问什么。不信你可以试试,也可以在MainPage页面的MainPage()方法外写一个类进行编写附加属性,方法多多,随意。但那要表现出自己高大上的感觉可以新建一个类的页面进行编写附加属性,不仅是高大上也是为了方便阅读以及后续的更改。

下面就直接放出代码,例子是写在新建的类的页面,请注意

   class GetWebHtml
{
//注册一个附加属性,括号内的参数,分别是 要添加的附加属性的名字,附加属性的类型,附加属性的所有者,附加属性的元数据,并且创建一个返回
public static readonly DependencyProperty setHtmlString =DependencyProperty.RegisterAttached
(
"HtmlString", typeof(string), typeof(GetWebHtml), new PropertyMetadata(null, CallBack)
); //这里对你要控件的操作
private static void CallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//将附加对象进行强制转换
WebView setData = d as WebView;
//添加值
setData.NavigateToString(e.NewValue.ToString());
}
//读取静态方法
public static string GetHtmlString(DependencyObject D)
{
return (string)D.GetValue(setHtmlString);
}
// 赋值静态方法
public static void SetHtmlString(DependencyObject D, string HtmlString)
{
D.SetValue(setHtmlString, HtmlString);
}
}

XAML页面

 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">

<WebView  local:GetWebHtml.HtmlString="{Binding T}" x:Name="_webview" />

        </ScrollViewer>

    </Grid>

MainPage页面

  public sealed partial class MainPage : Page
{ public class Data
{
public string T { get; set; }
} public MainPage()
{
this.InitializeComponent();
Data _data = new Data();
string data ="<img src=\"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1487774858602&di=bc76e28a0328dd7a4412c28ac96c844d&imgtype=0&src=http%3A%2F%2Fi-7.vcimg.com%2Fcrop%2F32eb472901ee07279ce5cbf8810ea493467409%2528600x%2529%2Fthumb.jpg\"/>";
_data.T = data;
this.DataContext = _data;
}
}

效果图

UWP&WP8.1 附加属性 和WebView的NavigateToString方法XAML绑定方法的更多相关文章

  1. UWP&WP8.1 中文网页字符乱码 字符乱码 UTF-8转GBK 解决方法

    UWP 方法 async void Download() { /*新建HttpClient*/ HttpClient web_ = new HttpClient(); /*使用HttpClient的G ...

  2. WP8没有开发者账号升级GDR3预览版的方法

    很多希望尝鲜WP8 GDR3的朋友一样希望提前体验GDR3的效果,但苦于没有开发者账号而不得其门!今天为大家带来普通账号升级GDR3的方法! 工具/原料 WP8智能手机 可用wifi热点 方法/步骤 ...

  3. C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。

    原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Phone App时,需要取得萤幕的大小来自定义最佳化控制项的大小,但是开如何取得萤 ...

  4. react-native WebView 返回处理 (非回调方法可解决)

    1.前言 项目中有些页面内容是变更比较频繁的,这些页面我们会考虑用网页来解决. 在RN项目中提供一个公用的Web页,如果是网页内容,就跳转到这个界面展示. 此时会有一个问题是,网页会有一级页面,二级页 ...

  5. UWP&WP8.1 基础控件——Image

    Image是UWP和WP8.1中系统自带的图片展示器. 具有较强的性能,使用也是非常的简单. 使用方式分为在XAML中,在C#代码中. XAML中: 在XAML中使用方式非常简单. 常用XAML So ...

  6. UWP&WP8.1 重新绘制图片 WriteableBitmap用法 图片转byte[]数组,byte[]数组转图片

    ---恢复内容开始--- WriteableBitmap 是UWP和WP8.1绘制图片的,重组图片的最重要方法.方法较为简单,方法多样性. 通过查看文档,WriteableBitmap的继承性是    ...

  7. UWP&WP8.1 基础控件——Grid

    Grid是一个面板控件  Grid是UWP和WPF,WP8.1中最重要的一个控件,相当相当重要. 他是一个面板控件,是用来添加其他控件   但是呢 用法确实简单的很. 大概就这个样子. 你用工具箱拖, ...

  8. UWP&WP8.1 基础控件——Border

    border 是边框控件 border是UWP和WP8.1最常用的控件之一. border字面意义是用来添加边框的. 基础用法 <border BorderThickness="1&q ...

  9. UWP&WP8.1图片照片添加水印

    水印可以自己自己制作,也可以用代码写. 我这里主要写如何添加到照片上面. UWP和WP8.1添加的方法一样.代码是通用的. UWP和WP8.1没有像WPF和WINFROM中darw这样简便的API可以 ...

随机推荐

  1. laravel的小坑

    写控制器的名的时候只能出现一个首写大写字母, 后面的都为小写字母 否则会报找不到该控制器的错误

  2. java代码流类。。程序怎么跟书上的结果不一样???

    总结:这个程序很容易懂.的那是这个结果我觉得有问题啊..怎么“stop”后,输出的内容是输入过的呢? 应该是没有关系的呀,与输入的值是不同的....怎么书上运行的结果和我的不一样啊 package c ...

  3. Redis事务和watch

    redis的事务 严格意义来讲,redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的. redis中的事务定义 Redis中的事务(transaction)是一组命令的集合. 事务同 ...

  4. DCloud-wap2app:杂项

    ylbtech-DCloud-wap2app:杂项 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   ...

  5. Redis codis 搭建测试

    codis Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别,有部分命令支持 Codis ...

  6. linux下面的挂载点讲解

    linux.unix这类操作系统将系统中的一切都作为文件来管理.在windows中我们常见的硬件设备.磁盘分区等,在linux.unix中都被视作文件,对设备.分区的访问就是读写对应的文件.挂载点实际 ...

  7. 9个步骤:教你设计出优秀的MMORPG副本关卡

    转自:http://www.gameres.com/664485.html 副本的定义 以一张场景地图为原型,针对单个玩家.队伍或者团队生成的一个实例,包含完整的开启关闭.怪物刷新.进度记录等逻辑. ...

  8. spring--AOP--日志---demo1---bai

    AOP日志DEMO1: 实体类: package com.etc.entity; import org.aspectj.lang.annotation.Pointcut; public class U ...

  9. 问题:sqlserver 跨服务器连接;结果:Sql Server 跨服务器连接

    Sql Server 跨服务器连接 用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset ...

  10. OpenGL 着色器 03

    着色器(shader)是运行在GPU上小程序. 也是一种非常独立的程序,它们之间不能相互通信:它们之间唯一的沟通只有通过输入和输出. 着色器的开头总是要声明版本,接着是输入和输出变量,uniform和 ...