欢迎大家提出意见,一起讨论!
转载请标明是引用于 http://blog.csdn.net/chenyujing1234
源码下载:
http://www.rayfile.com/zh-cn/files/459fa05c-bf69-11e1-b0ff-0015c55db73d/
编译平台:VS2008 + .Net Framework 3.5
语言: C#
此博客的目的:
以浏览器程序的实现,学习自定义TabControl的方法,使之能实现系统Tab不具有的功能:
(1)排列方式扩展为:Top、Bottom、Left、Right
(2)增加对TabItem的事件处理
(3)
一、浏览器实现
效果图:
1、启动窗口显示两个按钮
它们的处理函数对应是去创建窗口WindowUsingItemProperty或WindowUsingItemsSourceProperty
接下来的设计我们以WindowUsingItemProperty为例来说明.
2、加入自定义控件Wpf.TabControl
在WindowUsingItemProperty窗口的界面设计文件WindowUsingItemProperty.xaml中加入自定义控件Wpf.TabControl.
3、浏览器界面控件布局
首先将界面分为三行:
3、1 每一行加入TextBlock与TextBox,用于输入网址
当输入网址确认后的处理是获得浏览器对象并让浏览器导航到指定的网址
而浏览器的获得是通过当前TabItem来得到的
3、2 根据自定义控件TabControl的规则加入节点
请注意空间 r: 的原因。
3、2、1 对TabControl中的TabItem显示的三种状态进行设置。
目的是为了看起来像IE7的样子。
3、2、2 加入TabItem
TabItem中包括了对Header、Icon的设置,及在Item中的内容中包裹WebI浏览器
在 3、1 中我们看到GetCurrentWebBrowser的获得有两个步骤:
(1)获得选中的TabItem中的Content,并转化为WindowFormsHost
(2)获得WindowFormsHost的Child,来得到浏览器对象
3、2、2、1 浏览器DocumentTitleChanged、Navigated两个事件的处理
Browser_DocumentTitleChanged主要是更新TabItems的头特性、增加一个Icon到tabItem、把浏览器的DocumentTitle加入到tabItem中的Head中
Browser_Navigated主要是将浏览器当前的网址传给textBox
二、自定义控件Wpf.TabControl
1、控件外观设计(在Generic.xaml文件中)
1、1 整个文件以关键字ResourceDictionary开始
它定义了此控件的空间名字。
1、2TabControl 样式, 定义 TabControl 外表的样式
在Test工程中若用到TabControl控件,那么得采用 clr-namespace:Wpf.Controls::TabControl的形式;
引用到TabControl 控件中的属性时,得采用类似clr-namespace:Wpf.Controls::TabControl.TabItemNormalBackground的形式。
1、2、1 控件Template 的设计
如上图所示,控件的Template属性默认为TabControlTabPlacementTop.
它被分为两行五列,总共有六种样式(Top、Bottom、Left、Right)。以TabControlTabPlacementTop为例,如下:
TabControlTabPlacementTop里有六样元素:
ToggleButton:显示一个context 菜单,这个菜单显示所有的TabItem;
新建TabItem的按钮:
左RepeatButton:用来在view中向左滚动TabItems
ScrollViewer: 存放TabItem用的滚动面板
右RepeatButton:用来在view中向右滚动TabItems
内容面板:
外表看来是这样:
XAML中代码如下:
1、3 定义TabItem属性、样式
定义属性:
定义TabItem节点的控件模板,里面是一个Border,Border里分三列,分别放Icon、Header 和按钮。
可以看出Icon是在一个ContentPresenter里,通过Content="{TemplateBinding Icon}"绑定节点名字为icon;
Header是在一个Border里,通过Content="{TemplateBinding Header}"绑定节点名字为Header。
2、 TabConrol逻辑及数据设计
2、1 为节点TabControl中的Template属性加载处理函数。
C#提供了绑定的接口,即重载OnApplyTemplate函数。
通过this.Template.FindName找到对应TabControl中的Template里的5个元素。
分享到:
相关推荐
C# wpf combobox带treeview的自定义控件示例源码
WPF自定义时间控件,可选择日期、时间
WPF自定义的NumericUpDown控件,有源码。使用很方便,也可以自己定制。
简单的自定义样式的进度条,和大家分享 有横着的,有竖着的。
就是一个WPF如何自定义一个用户控件的小例子,主要是了解一下用户控件中不同的代码片应该插在哪里~
WPF自定义控件,完全原创, 采用命令绑定模式,要用分页的地方,只需要继承RepeaterPageViewModel 模型就行了,重用性,可扩展性很高,方便实用,代码包含了:ModelBase类,RelayCommand类,很实用的.还用到了WPFToolkit....
使用附加属性将各种控件拖动改变大小功能整合到一起,提高复用性和移植性,界面和逻辑分离,支持自定义拖动样式。原文链接:https://blog.csdn.net/u013113678/article/details/121719278
本资源实现了一种wpf在style中自定义标题栏无边框窗口的方法。style内部的实现其实没那么简单,尤其是实现按钮逻辑以及拖动逻辑,需要在style中关联cs代码,这就要求我们熟悉绑定技巧、附加属性还有ContentPresenter...
自定义日期控件,选择日期的同时,显示当前的时间,时间的格式可自定义,可显示时分秒、上午/下午、星期等,可自定义显示格式。对Datepicker的重写,其中有一个类,可以复制到自己的项目,也可以输出为dll控件,这是...
wpf 自定义 封装的控件
WPF自定义控件,动态添加、删除行,支持编辑,对外提供DataTable数据
你一定非常喜欢Office2007的Ribbon风格的菜单、按钮、对话框等等吧。这个程序使用WPF实现了一个控件,当然它目前还是在BETA版本,不过,已经足够精彩了。
WPF 实现自定义控件 WPF 实现自定义控件 WPF 实现自定义控件
在做视频剪辑工具的时候是需要尺子控件的,在wpf中很容易实现一个自定义的尺子控件。但是在实际使用中会遇到一个问题,即尺子越长,渲染速度越慢,当其总刻度到达几百万时拖动会直接造成界面卡顿。所以需要给标尺...
摘要:C#源码,控件类库,treeview,combobox,自定义控件 C# wpf combobox带treeview的自定义控件示例源码,树控菜单和下拉框的自定义源码,希望对你有所帮助。 运行环境:Visual Studio2010
主要给大家介绍了关于WPF如何自定义TabControl控件样式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
上一章我们实现了在style中自定义标题栏,解决了复用性的问题。但是在实际使用中,还是存在一些问题的,比如有些界面需要放几个菜单在标题栏或者不需要最大化按钮等,就会变得很不灵活。这时候就需要对style进行...
WPF自定义分页控件,压缩包包含源码,调用简单只需要注册对应的事件,在事件方法里刷新列表源数据。包含的功能有首页、尾页、上一页、下一页、页面跳转、单页显示条数切换,有7个动态生成的翻页按钮(可改)
WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不影响 程序的编译运行 这个样式表 在vs ...
WPF自定义进度条控件和slider 滑块控件源代码,WPF样式可自定义,ProgressBar,Slider,共享学习.