采用C#WPF实现自己的网页浏览器自定义Tab控件.docx
《采用C#WPF实现自己的网页浏览器自定义Tab控件.docx》由会员分享,可在线阅读,更多相关《采用C#WPF实现自己的网页浏览器自定义Tab控件.docx(5页珍藏版)》请在冰豆网上搜索。
![采用C#WPF实现自己的网页浏览器自定义Tab控件.docx](https://file1.bdocx.com/fileroot1/2023-1/6/145fa137-476a-432a-b3e2-cc6ee58e5145/145fa137-476a-432a-b3e2-cc6ee58e51451.gif)
采用C#WPF实现自己的网页浏览器自定义Tab控件
采用C#WPF实现自己的网页浏览器(自定义Tab控件)
采用C#WPF实现自己的网页浏览器(自定义Tab控件)
时间:
2012-06-1218:
51来源:
CSDN作者:
chenyujing1234点击:
108次
编译平台:
VS2008+.NetFramework3.5语言:
C#此博客的目的:
以浏览器程序的实现,学习自定义TabControl的方法,使之能实现系统Tab不具有的功能:
(1)排列方式扩展为:
Top、Bottom、Left、Right
(2)增加对TabItem的事件处理(3)一、浏览器实现效果图:
1、启动窗口显示两个按钮1、首先导入我们自己写的控件它们
编译平台:
VS2008+.NetFramework3.5
语言:
C#
此博客的目的:
以浏览器程序的实现,学习自定义TabControl的方法,使之能实现系统Tab不具有的功能:
(1)排列方式扩展为:
Top、Bottom、Left、Right
(2)增加对TabItem的事件处理
(3)
一、浏览器实现
效果图:
1、启动窗口显示两个按钮
1、首先导入我们自己写的控件
它们的处理函数对应是去创建窗口WindowUsingItemProperty或WindowUsingItemsSourceProperty
privatevoidItems_Click(objectsender,RoutedEventArgse)
{
//WindowUsingItemProperty对应于WindowUsingItemsProperty.xaml文件中的
//<Windowx:
Class="Test.WindowUsingItemProperty"
varwin=newWindowUsingItemProperty();
win.Show();
}
privatevoidItemsSource_Click(objectsender,RoutedEventArgse)
{
varwin=newWindowUsingItemsSourceProperty();
win.Show();
}
接下来的设计我们以WindowUsingItemProperty为例来说明.
2、加入自定义控件Wpf.TabControl
在WindowUsingItemProperty窗口的界面设计文件WindowUsingItemProperty.xaml中加入自定义控件Wpf.TabControl.
3、浏览器界面控件布局
首先将界面分为三行:
3、1每一行加入TextBlock与TextBox,用于输入网址
当输入网址确认后的处理是获得浏览器对象并让浏览器导航到指定的网址
privatevoidtextBox_KeyDown(objectsender,System.Windows.Input.KeyEventArgse)
{
//按了回车键
if(e.Key==Key.Return)
{
try
{
//鼠标变成等待
Cursor=System.Windows.Input.Cursors.Wait;
//通过自己封闭的函数GetCurrentWebBrowser获得当前的浏览器
System.Windows.Forms.WebBrowserbrowser=GetCurrentWebBrowser();
if(browser==null)return;//浏览器导航到指定的网址
browser.Navigate(textBox.Text);
}
finally
{
Cursor=System.Windows.Input.Cursors.Arrow;
}
}
}
而浏览器的获得是通过当前TabItem来得到的
privateSystem.Windows.Forms.WebBrowserGetCurrentWebBrowser()
{
//获得TabControl当前选择的TabItem
Wpf.Controls.TabItemitem=tabControl.SelectedItemasWpf.Controls.TabItem;
if(item==null)returnnull;//获得选中的TabItem中的Content,并转化为WindowFormsHost
WindowsFormsHosthost=item.ContentasWindowsFormsHost;
if(host==null)returnnull;//获得WindowFormsHost的Child,来得到浏览器对象
System.Windows.Forms.WebBrowserbrowser=host.ChildasSystem.Windows.Forms.WebBrowser;
returnbrowser;
}
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,来得到浏览器对象
//获得选中的TabItem中的Content,并转化为WindowFormsHost
WindowsFormsHosthost=item.ContentasWindowsFormsHost;
if(host==null)returnnull;//获得WindowFormsHost的Child,来得到浏览器对象
System.Windows.Forms.WebBrowserbrowser=host.ChildasSystem.Windows.Forms.WebBrowser;
3、2、2、1浏览器DocumentTitleChanged、Navigated两个事件的处理
Browser_DocumentTitleChanged主要是更新TabItems的头特性、增加一个Icon到tabItem、把浏览器的DocumentTitle加入到tabItem中的Head中
voidBrowser_DocumentTitleChanged(objectsender,EventArgse)
{
System.Windows.Forms.WebBrowserbrowser=senderasSystem.Windows.Forms.WebBrowser;
if(browser==null)return;//更新TabItems的头特性
Wpf.Controls.TabItemitem=tabControl.SelectedItemasWpf.Controls.TabItem;//增加一个Icon到tabItem
BitmapImageimage=newBitmapImage(newUri("pack:
//application:
,,/Test;component/Images/ie.ico"));
Imageimg=newImage();
img.Source=image;
img.Width=16;
img.Height=16;
img.Margin=newThickness(2,0,2,0);if(item!
=null)item.Icon=img;//把浏览器的DocumentTitle加入到tabItem中的Head中
TextBlocktb=newTextBlock();
tb.Text=browser.DocumentTitle;
tb.TextTrimming=TextTrimming.CharacterEllipsis;
tb.TextWrapping=TextWrapping.NoWrap;if(item!
=null)item.Header=tb;
}
Browser_Navigated主要是将浏览器当前的网址传给textBox
voidBrowser_Navigated(objectsender,WebBrowserNavigatedEventArgse)
{
//获得Web浏览器
System.Windows.Forms.WebBrowserbrowser=senderasSystem.Windows.Forms.WebBrowser;
if(browser==null)return;
//将浏览器当前的网址传给textBox
textBox.Text=browser.Url.ToString();
}