`
clingingboy
  • 浏览: 26505 次
  • 性别: 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控件拖动,控件换位置

    在Windows Presentation Foundation (WPF) 中,...以上就是实现WPF控件拖动和位置交换的基本步骤,结合动画效果,可以提供更加流畅、用户友好的交互体验。在实际项目中,你可能需要根据具体需求进行适当的调整和优化。

    WPF 自定义控件库 常用控件封装&常用控件样式重写

    总结,"WPF 自定义控件库 常用控件封装&常用控件样式重写"涉及到的核心技术包括WPF控件的封装、样式重写和控件库的构建,这些都是提升WPF应用界面设计和用户体验的关键手段。通过深入理解和运用这些知识,开发者能够...

    wpf控件库重写美化了各控件,如按钮、表格等

    综上所述,WPF控件库的重写和美化是一个涉及多方面技术的工作,包括但不限于控件继承、样式和模板定制、数据绑定、动画、响应式设计以及可访问性。这样的工作不仅可以提高应用的视觉吸引力,还能增强用户体验,是...

    WPF控件大小随着窗体的改变而改变

    标题"**WPF控件大小随着窗体的改变而改变**"所提及的现象,是WPF布局系统的一个重要功能,它允许控件如Button等能够自动调整其大小以适应窗口尺寸的变化。这一特性使得开发的程序具有更好的用户体验,因为用户可以...

    WPF控件示例大全

    通过“WPF控件示例大全”提供的微软控件示例,开发者不仅可以了解这些概念,还能看到实际的代码示例,从而快速掌握WPF控件的使用方法,提升开发技能。实践中学习,理论与实践相结合,是成为WPF开发高手的关键步骤。

    WPF时间扩展控件支持时分秒

    标题中的“WPF时间扩展控件支持时分秒”指的是一个特定的UI控件,它增强了WPF内置的时间选择功能,允许用户精确地选择和设置时间,包括小时、分钟和秒。这个控件对于需要进行时间输入的应用程序非常有用,例如日程...

    wpf 控件样式大全

    WPF的样式和模板支持响应式设计,通过使用SizeToContent、MinWidth/MinHeight等属性,以及Adorner和Popup等辅助元素,可以创建适应不同屏幕尺寸和分辨率的界面。 总结来说,"WPF 控件样式大全" 提供了大量预设的...

    WPF 开源控件库(含Demo)

    2. `HandyControl.dll`:这是核心的开源控件库,包含了各种自定义的WPF控件,如按钮、表格、日历、进度条等。这些控件通常具有更丰富的样式和功能,超越了WPF框架自带的标准控件。 3. `System.Windows....

    wpf异步加载5w控件_wpf控件_wfp_pleasefu4_

    它们在设计时提供了丰富的功能和自定义选项,但在处理大量数据时,同步加载这些控件可能会导致UI冻结,因为所有操作都在主线程上执行。为了解决这个问题,WPF引入了异步编程模型,允许开发者在后台线程上执行耗时...

    C# Winform使用WPF控件

    通过上述步骤,你就可以在Winform应用程序中使用WPF控件,充分利用WPF的丰富功能和美观的UI设计,同时保持Winform的开发效率和兼容性。这在需要升级旧有Winform应用或者需要特定UI功能时尤其有用。 在提供的`...

    wpf控件简单布局wpf控件简单布局

    本篇将深入探讨WPF控件的简单布局。 1. **StackPanel布局** StackPanel是最基础的布局容器之一,它可以将子元素沿指定方向(水平或垂直)堆叠。当你希望控件按顺序排列,不考虑它们的大小时,StackPanel是个好选择...

    WPF 控件开发教程

    Xceed.Wpf.Toolkit.dll是Xceed的工具包,包含了各种WPF控件和实用程序,这些可以帮助开发者快速构建用户界面,比如日期选择器、数字输入框等,提供了丰富的UI元素来满足不同需求。 Xceed.Wpf.AvalonDock.dll则是一...

    WPF控件WinForm

    1. **WPF简介**:WPF是.NET Framework的一部分,它提供了丰富的UI设计能力,支持数据绑定、样式和模板、图形渲染、以及多媒体元素等。WPF采用XAML语言来声明式地定义用户界面,使得设计和逻辑分离。 2. **WinForm...

    WPF控件代码大全(NET)

    WPF是微软开发的一个用于构建桌面应用程序的技术,它提供了丰富的用户界面(UI)设计工具和功能,支持XAML语言进行声明式编程。 【描述】:“WPF控件代码大全(NET)” 这个描述暗示了资源包可能包含了一系列关于WPF...

    WPF自定义控件-旋钮

    1. **自定义控件**: 在WPF中,自定义控件是通过继承现有的UI元素或控件并扩展其功能来实现的。这里,我们创建了一个新的控件,它继承了Slider的基础特性,并添加了旋转功能。 2. **模板化控件**: 自定义控件的一个...

    WPF控件继承树.pdf

    首先,WPF控件的根类是System.Object,它是.NET框架中所有类的最终基类。从System.Object继承下来,首先是System.Windows.Threading.DispatcherObject,这个类与WPF的线程模型相关,用于确保UI线程的安全访问。紧...

    WPF控件使用详解

    总的来说,WPF控件使用详解介绍了WPF的核心概念和操作方式,包括XAML的基本知识、控件的创建与实例化、控件外观的定制方法等。通过这些知识点,开发者可以灵活地在WPF中使用各种控件,构建出既美观又功能强大的...

    wpf控件例子

    本压缩包文件“wpf控件例子”包含了个人整理的WPF控件示例,对于初学者来说是一个很好的学习资源。 **控件库**:WPF提供了一个庞大的控件库,包括按钮(Button)、文本框(TextBox)、标签(Label)、列表视图...

    WPF 组态电表控件

    6. **响应式设计**:考虑到不同屏幕尺寸和分辨率,好的WPF电表控件应支持响应式布局,确保在各种设备上都能良好显示。 7. **性能优化**:由于电表控件可能需要频繁更新数据,因此其性能优化至关重要,避免对整体...

    WPF自定义搜索控件

    总之,创建一个自定义的WPF搜索控件需要对WPF控件系统有深入理解,包括模板设计、依赖属性、事件处理和数据绑定。通过这个示例,开发者可以学习到自定义控件开发的整个过程,并将其应用于自己的项目,提升用户体验。

Global site tag (gtag.js) - Google Analytics