日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

使用AvalonDock制作WPF多标签浏览器(一)

發布時間:2024/7/19 HTML 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用AvalonDock制作WPF多标签浏览器(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


AvalonDockCodePlex上的一個開源項目,利用它可以很容易的做出類似于VSUI效果。

下圖是AvalonDock源碼中自帶的一個Demo

我們可以用這款第三方控件為基礎來制作多標簽瀏覽器。

下面是最終效果圖:

?

甚至可以把其中一個標簽拖出主窗體成為一個獨立的窗口:


是不是很像VS2010中新的TextEditor啊,呵呵。

但是觀察一下常用的瀏覽器,比如IE


Chrome


FireFox


它們都有一個添加新標簽的按鈕,但是AvalonDockDocumentPane默認并沒有新建一個DocumentContent的按鈕。

DocumentPaneDocumentContentAvalonDock中眾多類型中的兩個,DocumentPaneDocumentContent的父級容器,DocumentContent中則可以置入任何UI元素,比如說一個WebBrowser

所以我們的第一步就從給AvalonDockDocumentPane寫一個添加新DocumentContent的按鈕開始吧。

首先ReStyle,從AvalonDock的源碼中找到DocumentPaneStyles.xaml這個文件,定位到

代碼<Button?x:Name="PART_ShowContextMenuButton"?DockPanel.Dock="Right"?Width="18"?Height="18"?Style="{StaticResource?PaneHeaderCommandStyle}"?Command="ad:DocumentPane.ShowDocumentsListMenuCommand">
????????????????????????????????????????
<ad:AlignedImage>
????????????????????????????????????????????
<Image?x:Name="ShowContextMenuIcon"?Source="Images\PinMenu.png"?Width="13"?Height="13"?Stretch="Uniform"/>
????????????????????????????????????????
</ad:AlignedImage>
????????????????????????????????????
</Button>

?

?

這段代碼

緊接著這段代碼添加如下代碼:

代碼<Button?DockPanel.Dock="Right"?Width="18"?Height="18"?Style="{StaticResource?PaneHeaderCommandStyle}"?Command="ad:DocumentPane.AddNewCommand">
????????????????????????????????????????
<ad:AlignedImage>
????????????????????????????????????????????
<Image?Source="Images\add.png"?Width="13"?Height="13"?Stretch="Uniform"/>
????????????????????????????????????????
</ad:AlignedImage>
????????????????????????????????????
</Button>

?

?

其中的add.png是我從網上隨便找的一個加號的圖片;

其中的ad:DocumentPane.AddNewCommand是緊接下來我們要給DocumentPane添加的一個Command

找到DocumentPane.cs文件并添加代碼:

代碼public?static?RoutedCommand?AddNewCommand?=?new?RoutedCommand();
????????
private?void?ExecutedAddNewCommand(object?sender,?ExecutedRoutedEventArgs?e)
????????{
????????????AddNew();
????????}
????????
private?void?AddNew()
????????{
????????????DocumentContent?newContent?
=?new?DocumentContent();
????????????newContent.Title?
=?"new?content";
????????????newContent.IsFloatingAllowed?
=?true;
????????????Items.Add(newContent);
????????}
????????
private?void?CanExecuteAddNewCommand(object?sender,?CanExecuteRoutedEventArgs?e)
????????{
????????????e.CanExecute?
=?true;
????????}

?

?

然后再在其OnInitialized方法中添加如下一句:

this.CommandBindings.Add(new?CommandBinding(AddNewCommand,?ExecutedAddNewCommand,?CanExecuteAddNewCommand));

?

?

這樣我們就給DocumentPane添加了一個加號按鈕并把它和AddNewCommand這個命令聯系了起來,點擊按鈕時我們添加的AddNew方法就會執行。由于DocumentPaneWPFSelector的子類,而Selector又繼承自ItemsControl,所以DocumentPane會有一個Items屬性,我們在AddNew方法中做的就是給其Items中塞進一個新的DocumentContent

這時再次運行AvalonDock自帶的Demo,可以看見右側有一個小加號按鈕,點擊按鈕則可以新建標簽頁:


OK!第一步搞定了。

但是每一個標簽都是空的,下一步要給每個標簽中添加一個WebBrowser

是不是修改一下前面添加的AddNew方法,在里面new?up一個WebBrowser呢,不太好,這樣感覺不是在修改而是在破壞AvalonDock的源碼,畢竟AvalonDock是一個控件庫,添加一個新標簽時,其默認行為就應該是讓標簽為空。

給每個新添加的空標簽中置入一個WebBrowser應該是在客戶代碼中做的事兒。

這部分明天再寫吧,洗洗去看10-4?show了。(挺好看的視頻,講VS2010.Net?4?new?features的:http://channel9.msdn.com/shows/10-4/?

Over?and?outCiao

轉載于:https://www.cnblogs.com/cuipengfei/archive/2010/03/15/1686699.html

總結

以上是生活随笔為你收集整理的使用AvalonDock制作WPF多标签浏览器(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。