`
clingingboy
  • 浏览: 25769 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

wpf控件设计时支持(1)

阅读更多

   这部分内容几乎是大家忽略的内容,我想还是来介绍一下.

本篇源码下载

1.属性元数据

image

在vs IDE中,在asp.net,winfrom等开发环境下,右侧的PropertyGrid属性面板,会对属性进行分类,这有利于了解控件属性的用途.

若你之前在.net平台下做过控件开发,你应该知道这些功能是通过属性元数据实现的,比如使用Category元数据,把Content属性分到Content类别下.

[Category("Content")]
public object Content { get; set; }

 

这种方法在开发wpf自定义控件依然可用.我们以名为DesginCustomControl的自定义控件为例子.因为是wpf控件,所以属性变更为依赖项属性.

public class DesginCustomControl : ContentControl
{

    [Category("Content")]
    public string Content
    {
        get { return (string)GetValue(ContentProperty); }
        set { SetValue(ContentProperty, value); }
    }

    public static readonly DependencyProperty ContentProperty =
        DependencyProperty.Register("Content", typeof(string), typeof(DesginCustomControl), new UIPropertyMetadata(String.Empty));
   
}

效果如下:

image

2.属性元数据集合

 

wpf的设计时允许我们将这些元数据与控件属性分离出来.下面我们来实现一个简单的功能

2.1新建一个设计时支持的单独项目

image

WPF.Controls是控件项目,WPF.Controls.VisualStudio.Design是控件设计时项目

注意:

(1)程序集命名约定

设计时的程序集是有命名约定的,这样才可以受到VisualStudio的支持.如控件程序集是WPF.Controls,那么设计时程序集则是

控件程序集的名字+VisualStudio.Design

(2)设计时程序集编译位置

设计时程序集必须与控件存放在同个目录下才能工作,引用控件的项目无需引用设计时程序集

假设WPF.Controls的编译目录没有做变更的话,那么WPF.Controls.VisualStudio.Design这个项目编译好后是存在在WPF.Controls的bin目录下面的.

(3)引用Microsoft.Windows.Design程序集

Microsoft.Windows.Design是wpf设计时支持的基础,所以要引用这个程序集

2.2注册属性的元数据集合

实现一个名为IRegisterMetadata的接口。来看一下代码

public class WPFControlsCommonMetadata : IRegisterMetadata
{
    public void Register()
    {
        AttributeTableBuilder MainBuilder = new AttributeTableBuilder();
        MainBuilder.AddCustomAttributes(typeof(DesginCustomControl),DesginCustomControl.ContentProperty,new Attribute[]{
                     new CategoryAttribute("Content")});
        MetadataStore.AddAttributeTable(MainBuilder.CreateTable());
    }
}

 

AttributeTableBuilder是属性元数据表,msdn是解释属性表.AttributeTableBuilder有多个AddCustomAttributes重载方法.可以将元数据附加到属性上.比如上面代码给DesginCustomControl的Content属性添加了一个CategoryAttribute元数据.添加完毕以后再通过

MetadataStore的AddAttributeTable方法添加属性元数据表.MetadataStore称之为元数据存储区.

以上代码的实现与在控件上直接挂元数据标签效果是一样.有什么不同点呢?

若我们为asp.net的内置控件扩展设计时的话,则必须继承该控件.这里便不会有这个问题,两者是完全分离的.

2.3延迟添加属性元数据

上面的示例,直接在MainBuilder类中为控件添加元数据,当为比较多的控件添加元数据时,同时加载会出现性能问题,所以MainBuilder还提供了AddCallback方法,当需要时,才会为控件添加元数据.现以上示例代码变更如下

public class WPFControlsCommonMetadata : IRegisterMetadata
{
    public void Register()
    {
        AttributeTableBuilder MainBuilder = new AttributeTableBuilder();
        MainBuilder.AddCallback(
             typeof(DesginCustomControl),
             delegate(AttributeCallbackBuilder builder)
             {
                 builder.AddCustomAttributes(DesginCustomControl.ContentProperty, new Attribute[]{
                     new CategoryAttribute("Content")});
                 
             });
        MetadataStore.AddAttributeTable(MainBuilder.CreateTable());
    }
}

 

是不是感觉很无聊,为了这么个东西还要去研究:),觉得的有用的就看一下吧,这篇就写这么多,写完就差不多可以放假回家了.

分享到:
评论

相关推荐

    WPF控件TreeGrid/类似TreeListView

    通过继承WPF控件Datagrid,设计具有展开折叠功能的TreeListView,相对于网上较为流行的使用GridView和TreeView组合实现的TreeListView,本控件纯粹使用Datagrid扩展,并具备编辑功能,完全支持MVVM操作,有点类似...

    Telerik WPF控件的自编译版本

    最终代码量是原来的3/5,同时由于去掉了主题加载功能,因此启动速度应该有提升,Telerik的WPF控件确实掌握了WPF设计的精髓,很多控件都有很强的可展性,就说那个ChartView控件,简单的代码集成,就让一个图形具备了十...

    WPF揭秘-PDF 电子书

    图灵程序设计丛书·.NET系列·WPF揭秘》是针对那些对用户界面开发感兴趣的软件开发人员编写的Windows Presentation Foundation (WPF) 是.NET Framework 3.0 的关键组件,是支持下一代视窗应用程序表现层编程的平台,...

    wpf程序设计指南(中文版)

    WPF为Windows ... WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的.NET UI 框架,集成了矢量图形,丰富的流动文字支持flow text support,3D视觉效果和强大无比的控件模型框架。

    WPF编程宝典 part1

    11.3.5 Blend中的设计时行为支持 271 11.4 小结 271 第Ⅲ部分 图画和动画 第12章 形状、画刷和变换 275 12.1 理解形状 275 12.1.1 Shape类 276 12.1.2 矩形和椭圆 277 12.1.3 改变形状的尺寸和放置形状 278 12.1.4 ...

    WPF揭秘 第一章 wpf 开发

     第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、...

    PanuonUI:一个好看精致,开源无限制使用的WPF控件库

    PanuonUI(v1.0.0 alpha) 本项目已停止维护。请使用全新的PanuonUI.Silver。 - 由于PanuonUI在设计初期的根本缺陷,PanuonUI从今日起已停止维护。...一个好看精致,不限制个人或商业使用的WPF控件库。 Pa

    WPF按钮条导航控件

    在WrapPanel基础上设计的按钮条导航控件,可横向/纵向排列按钮,也可以多列排列控件,类似于TabControl的标签条,用于不同页面的导航,但该控件没有容器,通过和Frame控件的配合,实现导航到不同的Page对象,样式可...

    wpf完全教程1-4章

     第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、...

    WPF单行文本两端对齐

    WPF是不支持单行文本的两端对齐的,于是自己写了一个控件。有兴趣的朋友可以下载了解一下我的设计原理。

    WPF揭秘 第四章 wpf 开发

     第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、...

    将Flash 嵌入WPF 程序源码

    由于WPF 本身中不支持COM 组件同时也无法加载ActiveX 控件,所以需要借助WinForm 引用ActiveX 控件将Flash 加入其中。首先创建一个 WPF 项目(WpfFlash),将Flash 文件(.swf)加入到项目中,并将Copy to Output ...

    NET6+WPF+MVVM

    内容概况: 基于NET6框架下采用WPF+MVVM进行的UI设计。...WPF自定义控件、样式、MVVM、异步线程等 阅读建议: 下载并编译,并尝试修改 相关界面: https://blog.csdn.net/u010186391/article/details/125601226

    WPF TreeView ListView 数据联动

    支持模仿Tab+控件区域的设计和动态切换 支持TreeView动态修改数据 支持ListView动态修改数据,选定行变色,单个cell规则,支持Cell按钮, 支持xml解析,支持登录界面权限控制, 三层树形数据提供给TreeView 实在是...

    Stimulsoft Reports.Wpf试用版:一款功能强大的WPF报表控件,包含了多种常用的报表元素,进行大数据的分析和展示。

    Stimulsoft Reports.Wpf 试用版 试用版 ...包含了常用的报表控件元素:条码、图表等,丰富的界面更换功能、查看功能、打印以及导出报表功能——所有的这一切就是它都能轻松实现。并且支持最终用户自定义报表。

    WPF编程宝典 part2

    11.3.5 Blend中的设计时行为支持 271 11.4 小结 271 第Ⅲ部分 图画和动画 第12章 形状、画刷和变换 275 12.1 理解形状 275 12.1.1 Shape类 276 12.1.2 矩形和椭圆 277 12.1.3 改变形状的尺寸和放置形状 278 12.1.4 ...

    WPF揭秘 第二章 wpf 开发

     第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、...

    WPF揭秘 第三章 wpf 开发

     第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、...

    原创WPF卫生相关文档编辑器

    采用WPF,完全基于.NET环境开发的一款电子病历编辑器组件;部分基于AvalonEdit的编码,根据电子病历编辑特点实现 各类编辑功能,支持常用的基本功能...支持各种第三方控件,丰富的自定义元 素等。本资源仅供学习讨论。

    wpf 过渡切换背景图片及自定义按钮效果

    用Expression Studio弄了大半天的wpf。终于做出来一点点小东西。其中包含了过渡切换背景还有一个自定义的按钮。还外带了微软官方的一个3d动画Demo。有人说拖控件的程序员不是合格的程序员。咱可以不是程序员,咱可以...

Global site tag (gtag.js) - Google Analytics