扩展方法可以使我们为现有的添加方法,现有的类可是是CLB的也可以是自己定义的。
注意事项:
   通过this修饰方法第一个参数
   方法声明在静态类中
   方法通过对象调用
重要注意事项:
   扩展方法和类中方法同名,扩展方法将永远不会被调用
   扩展类型如果修改,扩展方法可能失效

下面我们讲一个扩展silverlight中RichTextBox的例子,在实际的开发中我们可能需要对RichTextBox取值或者设置值,在silverlight中并没有提供这个方法
实例如下:

建一个RichTextBox的扩展类RTBExtension:

代码

using System.Windows.Controls;
using System.Windows.Documents;

namespace ExtensionRichTextBox
{
/// <summary>
/// RTB扩展取值和设值方法
/// </summary>
public static class RTBExtension
{
/// <summary>
/// 取RTB值
/// </summary>
/// <param name="?"></param>
/// <returns></returns>
public static string GetRTBValue(this RichTextBox rtb)
{
string Text = string.Empty;
for (int i = 0; i < rtb.Blocks.Count; i++)
{
Paragraph p = (Paragraph)rtb.Blocks[i];
for (int j = 0; j < p.Inlines.Count; j++)
{
Run r = (Run)p.Inlines[j];
Text += r.Text;
}
}
return Text;
}

public static void SetRTBValue(this RichTextBox rtb, string data)
{
Paragraph p = new Paragraph();
Run r = new Run();
r.Text = data;
p.Inlines.Add(r);
rtb.Blocks.Clear();
rtb.Blocks.Add(p);
}

}
}

接下里我们在界面上拖一个RichtextBox TextBox 和两个Button,来测试这两个扩展方法

代码

public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}

/// <summary>
/// 设置值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, RoutedEventArgs e)
{
RTBExtension.SetRTBValue(this.richTextBox1, this.txtBlock1.Text);
}
/// <summary>
/// 取值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, RoutedEventArgs e)
{
this.txtBlock1.Text = RTBExtension.GetRTBValue(this.richTextBox1);
}
}

运行的效果:

从Textbox中取值设置给RichtextBox

从RichtextBox中取值设置给Textbox

转载于:https://www.cnblogs.com/Clivia/archive/2010/11/27/silverlight12.html

C#3.0新特性 扩展方法相关推荐

  1. 大数据技术之_11_HBase学习_03_HBase 实战之谷粒微博(练习API) + 扩展知识(布隆过滤器+HBase2.0 新特性)

    大数据技术之_11_HBase学习_03 第8章 HBase 实战之谷粒微博 8.1 需求分析 8.2 代码实现 第9章 扩展知识 9.1 HBase 在商业项目中的能力 9.2 布隆过滤器 9.3 ...

  2. C# 7.0 新特性:本地方法

    C# 7.0:本地方法 VS 2017 的 C# 7.0 中引入了本地方法,本地方法是一种语法糖,允许我们在方法内定义本地方法.更加类似于函数式语言,但是,本质上还是基于面向对象实现的. 1. 本地方 ...

  3. android studio viewo,android studio 3.6.0 绑定视图新特性的方法

    Android studio 3.6.0 绑定视图使用方法 1.确保你的 build gradle 最低为3.6.0 dependencies { classpath 'com.android.too ...

  4. [转]C# 2.0新特性与C# 3.5新特性

    C# 2.0新特性与C# 3.5新特性 一.C# 2.0 新特性: 1.泛型List<MyObject> obj_list=new List(); obj_list.Add(new MyO ...

  5. C#6.0,C#7.0新特性

    C#6.0,C#7.0新特性 C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto- ...

  6. WCF4.0新特性体验(6):路由服务Routing Service(下)

    紧接前文WCF4.0新特性体验(5):路由服务Routing Service(上).今天我们介绍WCF4.0消息路由的实现机制,然后会讲解路由服务的实现过程. [4]WCF与路由服务: 其实在介绍WC ...

  7. 【收藏】C# 2.03.0新特性总结

    c#2.0新特性 范型 我们知道通用的数据结构可以采用object存储任何数据类型.使用object问题是: 显示的强制转带来的代码复杂性 换装箱拆箱的性能损失(为什么有性能损失?因为涉及动态内存分配 ...

  8. 精进不休 .NET 4.0 (4) - C# 4.0 新特性之命名参数和可选参数

    [索引页] [源码下载] 精进不休 .NET 4.0 (4) - C# 4.0 新特性之命名参数和可选参数, 动态绑定(dynamic), 泛型协变和逆变, CountdownEvent, Barri ...

  9. [WCF 4.0新特性] 标准终结点与无(.SVC)文件服务激活

    今天介绍WCF 4.0的另外两个新特性:标准终结点(Standard Endpoint)和无(.SVC)文件服务激活(File-Less Activation).前者实现了针对典型通信场景对终结点的定 ...

最新文章

  1. mysql+实例夯住的监控_Nagios 里面监控MySQL 监控事务夯住(RUNNING)报警通知
  2. DNS与Active Directory在两台服务器分别布署
  3. 41 Ansible安装
  4. Agent admitted failure to sign using the key
  5. contentType类型,ajax内容类型
  6. 关于C++编写com和调用com组件的小例子以及个人所犯错误见解
  7. Linux系统的应用软件流程图绘制软件yEd
  8. html中b和strong的区别,i和em的区别
  9. Ubuntu20.04设置网络共享文件夹
  10. 一日精通python编程_爱上Python 一日精通Python编程 [Learn Python in One Day and Learn it Well ]...
  11. 最简单的P2P加密聊天软件开发准备
  12. vue项目中 一行文本 文字 根据关键字 改变颜色 改变展示颜色
  13. 博奥智源汇总关于校车管理系统开发功能列表-转自博奥智源
  14. 一款基于springboot开发的经典后台管理系统
  15. Cisco 配置 GRE隧道
  16. 运动学习与控制-学习笔记(三)——运动控制理论
  17. 致敬贝叶斯以及自己对贝叶斯的一些见解
  18. django 热启动_uwsgi 热部署 热启动 热更新
  19. 修改计算机 注册到 用户,电脑修改注册表导致开机时电脑显示“无法登陆到你的账户”的问题解决方案...
  20. 计算机学校排名中学,美国高中计算机专业名校:美高STEM排名TOP20

热门文章

  1. java 上传图片后没法立马显示出来_SpringMVC多个文件上传及上传后立即显示图片功能...
  2. linux php 中文文件名乱码,linux文件名乱码
  3. python可视化工具bokeh_浅谈python可视化包Bokeh
  4. php短路逻辑,JS利用短路原理简写if语句
  5. html css三类选择器,css三类选择器 用法 引用
  6. 蓝魔i11pro运行linux,不仅仅是变大了 蓝魔i11pro新玩法
  7. linux postgre服务名,linux中service配置之postgresql
  8. 插入排序算法 java_排序算法实现-插入排序(Java版本)
  9. ppt课堂流程图_4个超实用的PPT制作技巧:开学提升备课质量,资深老师都在用
  10. matlab7.x答案,MATLAB习题及参考答案