《采用C#WPF實現(xiàn)自己的網(wǎng)頁瀏覽器(自定義Tab控件)》由會員分享,可在線閱讀,更多相關《采用C#WPF實現(xiàn)自己的網(wǎng)頁瀏覽器(自定義Tab控件)(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、采用C#WPF實現(xiàn)自己的網(wǎng)頁瀏覽器(自定義Tab控件)
采用C#WPF實現(xiàn)自己的網(wǎng)頁瀏覽器(自定義Tab控件)
時間:2012-06-12 18:51來源:CSDN 作者:chenyujing1234 點擊:108次
編譯平臺:VS2008 + .Net Framework 3.5 語言: C# 此博客的目的: 以瀏覽器程序的實現(xiàn),學習自定義TabControl的方法,使之能實現(xiàn)系統(tǒng)Tab不具有的功能: (1)排列方式擴展為:Top、Bottom、Left、Right (2)增加對TabItem的事件處理 (3) 一、瀏覽器實現(xiàn) 效果圖: 1、啟動窗口顯示兩個按鈕 1
2、、首先導入我們自己寫的控件 它們
編譯平臺:VS2008 + .Net Framework 3.5
語言: C#
此博客的目的:
以瀏覽器程序的實現(xiàn),學習自定義TabControl的方法,使之能實現(xiàn)系統(tǒng)Tab不具有的功能:
(1)排列方式擴展為:Top、Bottom、Left、Right
(2)增加對TabItem的事件處理
(3)
一、瀏覽器實現(xiàn)
效果圖:
1、啟動窗口顯示兩個按鈕
1、首先導入我們自己寫的控件
它們的處理函數(shù)對應是去創(chuàng)建窗口WindowUsingItemPro
3、perty或WindowUsingItemsSourceProperty
private void Items_Click(object sender, RoutedEventArgs e)
{
// WindowUsingItemProperty對應于WindowUsingItemsProperty.xaml文件中的
// <Window x:Class="Test.WindowUsingItemProperty"
var win = new WindowUsingIte
4、mProperty();
win.Show();
}
private void ItemsSource_Click(object sender, RoutedEventArgs e)
{
var win = new WindowUsingItemsSourceProperty();
win.Show();
}
接下來的設計我們以WindowUsingItemProperty為例來說明.
2、加入自定義控件W
5、pf.TabControl
在WindowUsingItemProperty窗口的界面設計文件WindowUsingItemProperty.xaml中加入自定義控件Wpf.TabControl.
3、瀏覽器界面控件布局
首先將界面分為三行:
3、1 每一行加入TextBlock與TextBox,用于輸入網(wǎng)址
當輸入網(wǎng)址確認后的處理是獲得瀏覽器對象并讓瀏覽器導航到指定的網(wǎng)址
private void textBox_KeyDown(object sender, System.Windows.Input.Ke
6、yEventArgs e)
{
// 按了回車鍵
if (e.Key == Key.Return)
{
try
{
// 鼠標變成等待
Cursor = System.Windows.Input.Cursors.Wait;
// 通過自己封閉的函數(shù)GetCurrentWeb
7、Browser 獲得當前的瀏覽器
System.Windows.Forms.WebBrowser browser = GetCurrentWebBrowser();
if (browser == null) return; // 瀏覽器導航到指定的網(wǎng)址
browser.Navigate(textBox.Text);
}
finally
8、 {
Cursor = System.Windows.Input.Cursors.Arrow;
}
}
}
而瀏覽器的獲得是通過當前TabItem來得到的
private System.Windows.Forms.WebBrowser GetCurrentWebBrowser()
{
// 獲得TabControl當前選擇的TabItem
9、Wpf.Controls.TabItem item = tabControl.SelectedItem as Wpf.Controls.TabItem;
if (item == null) return null; // 獲得選中的TabItem中的Content,并轉化為WindowFormsHost
WindowsFormsHost host = item.Content as WindowsFormsHost;
if (host == null) return null;
10、 // 獲得WindowFormsHost的Child,來得到瀏覽器對象
System.Windows.Forms.WebBrowser browser = host.Child as System.Windows.Forms.WebBrowser;
return browser;
}
3、2 根據(jù)自定義控件TabControl的規(guī)則加入節(jié)點
請注意空間 r: 的原因。
3、2、1 對TabControl中的TabItem顯示的三種狀態(tài)進行設置。
目的是為
11、了看起來像IE7的樣子。
3、2、2 加入TabItem
TabItem中包括了對Header、Icon的設置,及在Item中的內容中包裹WebI瀏覽器
在 3、1 中我們看到GetCurrentWebBrowser的獲得有兩個步驟:
(1)獲得選中的TabItem中的Content,并轉化為WindowFormsHost
(2)獲得WindowFormsHost的Child,來得到瀏覽器對象
// 獲得選中的TabItem中的Content,并轉化為WindowFormsHost
Window
12、sFormsHost host = item.Content as WindowsFormsHost;
if (host == null) return null; // 獲得WindowFormsHost的Child,來得到瀏覽器對象
System.Windows.Forms.WebBrowser browser = host.Child as System.Windows.Forms.WebBrowser;
3、2、2、1 瀏覽器DocumentTitleChanged、Navigated兩個事件的處理
13、
Browser_DocumentTitleChanged主要是更新TabItems的頭特性、增加一個Icon到tabItem、把瀏覽器的DocumentTitle加入到tabItem中的Head中
void Browser_DocumentTitleChanged(object sender, EventArgs e)
{
System.Windows.Forms.WebBrowser browser = sender as System.Windows.Forms.WebBrowser;
if
14、(browser == null) return; // 更新TabItems的頭特性
Wpf.Controls.TabItem item = tabControl.SelectedItem as Wpf.Controls.TabItem; // 增加一個Icon到tabItem
BitmapImage image = new BitmapImage(new Uri("pack://application:,,,/Test;component/Images/ie.ico"));
15、 Image img = new Image();
img.Source = image;
img.Width = 16;
img.Height = 16;
img.Margin = new Thickness(2, 0, 2, 0); if (item != null) item.Icon = img; // 把瀏覽器的DocumentTitle加入到tabItem中的Head中
Te
16、xtBlock tb = new TextBlock();
tb.Text= browser.DocumentTitle;
tb.TextTrimming = TextTrimming.CharacterEllipsis;
tb.TextWrapping = TextWrapping.NoWrap; if (item != null) item.Header = tb;
}
Browser_Navigated主要是將瀏覽器當前的網(wǎng)址傳給textBox
17、 void Browser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
// 獲得Web瀏覽器
System.Windows.Forms.WebBrowser browser = sender as System.Windows.Forms.WebBrowser;
if (browser == null) return;
// 將瀏覽器當前的網(wǎng)址傳給textBox
textBox.Text = browser.Url.ToString();
}