WPF组件开发
2024-10-18 22:31:45
在做组件之前,为了适应框架,我们需要有一个基类,并将这个基类打包成一个模板,让大部分组件去使用这个模板。
组件的基类就不多讲了,上篇文章中已经说过了。这是地址:
http://www.cnblogs.com/BeiJing-Net-DaiDai/articles/3248034.html
首先 将基类打包成一个模板 放在
C:\Users\Administrator\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual C# 文件夹下这是win7下的 xp的在我的文档目录下找。
然后启动vs2010 文件->新建->项目
选择Visual C# 找到Component
打开这个 就看到模板了。
ok! 开始编辑
哦,对了 记得改下名字。
在创建解决方案的时候去改,不要创建好之后改,以免不必要的麻烦。
组件:
public class ComponentTextBox : Component
{
public ComponentTextBox()
{
Content = new ShapeComponentTextBox();
} public override string TextName
{
get { return "文本框"; }
}
}
组件的属性:
public class ComponentTextBoxProperty : ComponentProperty
{
private string _Content; [Category("内容设置")]
[Description("文字")]
public string Content
{
get { return _Content; }
set
{
if (_Content == value) return; _Content = value;
OnPropertyChanged("Content");
}
} }
组件的事件:
public class ComponentTextBoxEvent : ComponentEvent
{
private string _Click; [Category("基础事件")]
[Description("单击事件.")]
[EventInfo("Click")]
public string Click
{
get { return _Click; }
set
{
if (_Click == value) return;
_Click = value;
OnPropertyChanged("Click");
}
} public void OnClick(object sender, RoutedEventArgs e)
{
if (Click != null)
{
//事件处理
}
}
}
ShapeComponentTextBox:
public class ShapeComponentTextBox : HrvContent
{
public ComponentTextBoxProperty _Property;
public ComponentTextBoxEvent _Event; public ShapeComponentTextBox()
{ this.Content = new TextBox();
BindingOperations.SetBinding(this.Content as TextBox, TextBox.ContentProperty, new Binding("Content") { Source = this.Property, Mode = BindingMode.TwoWay });
} public override ComponentProperty Property
{
get
{
if (_Property == null)
{
_Property = new ComponentTextBoxProperty();
}
return _Property;
}
} public override ComponentEvent Event
{
get
{
if (_Event == null)
{
_Event = new ComponentTextBoxEvent();
}
return _Event;
}
}
}
如此,大功告成!
这样就创建了一个TextBox组件(因为我没有自己写)想自己写可以按照这种方式去写。
点击加入QQ群:
WPF、AE技术交流群:94234450
最新文章
- WPF系列 Path表示语法详解(Path之Data属性语法)
- WinForm 容器控件
- Android 运行时权限处理
- Recyclerview使用系列教材
- BroadCast Receive 生命周期
- UVA-12436 Rip Van Winkle's Code (线段树区间更新)
- iOS 数据存储 - 归档和解归档
- 【转】使用断言NSAssert()调试程序错误
- 转:Android studio Gradle
- poj 1659 Frogs' Neighborhood Havel-Hakimi定理 可简单图定理
- Android支付接入(二):移动游戏基地
- Apache 80 端口被占用无法重启解决办法
- ♫【网站优化】Reflow / Repaint
- COJN 0575 800601滑雪
- [置顶] 【VB.NET2010】注册表写入方法
- ios 开发 常见问题解决 (持续更新)
- iOS APP之间到跳转,以及热门应用,手机自带到应用跳转
- Search 命令详解
- 【转载】2015 Objective-C 三大新特性 | 干货
- 用html给div加类似a标签的超链接(转)
热门文章
- Codeforces Round #198 (Div. 2) —— D
- ubuntu 64bit “arm-linux-gcc: No such file or directory”问题的解决方法
- 李洪强漫谈iOS开发[C语言-032]-三目运算符
- Linux 命令备注
- POJ_3579_Median_(二分,查找第k大的值)
- (转载)JavaScript中的Window窗口对象
- 初次运行 Git 前的配置
- Java for selenium(webdriver) 环境搭建
- django 项目部署在 Apache 后, 设置二级域名(Apache虚拟主机 、 万网二级域名设置)
- Fiddler基本用法以及如何对手机抓包