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


AvalonDockCodePlex上的一个开源项目,利用它可以很容易的做出类似于VSUI效果。

下图是AvalonDock源码中自带的一个Demo

我们可以用这款第三方控件为基础来制作多标签浏览器。

下面是最终效果图:

 

甚至可以把其中一个标签拖出主窗体成为一个独立的窗口:


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

但是观察一下常用的浏览器,比如IE


Chrome


FireFox


它们都有一个添加新标签的按钮,但是AvalonDockDocumentPane默认并没有新建一个DocumentContent的按钮。

DocumentPaneDocumentContentAvalonDock中众多类型中的两个,DocumentPaneDocumentContent的父级容器,DocumentContent中则可以置入任何UI元素,比如说一个WebBrowser

所以我们的第一步就从给AvalonDockDocumentPane写一个添加新DocumentContent的按钮开始吧。

首先ReStyle,从AvalonDock的源码中找到DocumentPaneStyles.xaml这个文件,定位到

ExpandedBlockStart.gif代码
<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>

 

 

这段代码

紧接着这段代码添加如下代码:

ExpandedBlockStart.gif代码
<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文件并添加代码:

ExpandedBlockStart.gif代码
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

量子计算机不会“秒杀”经典计算机

来源&#xff1a;《中国科学报》 作者&#xff1a;陈昭昀许多人在介绍量子计算机的时候&#xff0c;都喜欢用到“秒杀”这个词。比如&#xff1a;量子计算机将“秒杀”现有密码体系、量子计算机将“秒杀”经典计算机&#xff0c;甚至将量子计算机比作无所不能的“千手观音”&a…

WEB三大攻击之—SQL注入攻击与防护

From&#xff1a;https://www.daguanren.cc/post/sql-injection.html SQL注入的定义与诱因 定义 SQL攻击&#xff08;英语&#xff1a;SQL injection&#xff09;&#xff0c;简称注入攻击&#xff0c;是发生于应用程序之数据库层的安全漏洞。简而言之&#xff0c;是在输入的…

Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」...

原文来源&#xff1a;arXiv 作者&#xff1a;Alex Lamb、Jonathan Binas、Anirudh Goyal、Dmitriy Serdyuk、Sandeep Subramanian、Ioannis Mitliagkas、Yoshua Bengio「雷克世界」编译&#xff1a;嗯~是阿童木呀、KABUDA、EVA导语&#xff1a;深度神经网络在各种各样的重要任…

在视图中显示InActive记录

最近很多朋友(Andrew、BENEN1)都在问如何让Lookup显示InActive记录,研究后发现可以通过Plugin来实现这样的功能&#xff0c;MSCRM真是无所不能&#xff0c;没有做不到&#xff0c;只有想不到!实现步骤&#xff1a;一、自定义实体->工程项目->表单和视图->查找视图->…

计算机网申兴趣爱好怎么写,网申简历中的特长爱好到底怎么写

原标题:网申简历中的特长爱好到底怎么写&#xff1f;2017年安徽农商银行招聘920人报名已经进行了几天了.在报名的过程中,有很多小伙伴不知道网申时的特长爱好怎么写.那么,不论是在网申还是在求职过程中的简历特长爱好到底要怎么写呢&#xff1f;加备考群 免费领资料 626394893下…

OpenAI 发布通用人工智能研究纲领:以全人类的名义承诺

作者&#xff1a;杨晓凡近期 Facebook 泄露用户数据、针对性影响用户、Uber 无人车事故&#xff0c;以及全球学者联名抵制韩国开发自主武器的事情再次敲响了人工智能安全的警钟。OpenAI 也于昨日发表了一份自己的研究纲领&#xff0c; 表明了自己的科研使命和行动法则&#xff…

基于深度学习的性别识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 GoogLeNet网络结构 4.2. 基于GoogLeNet的性别识别算法 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..............................…

李飞飞:让机器有分辨事物的“眼睛”

来源&#xff1a;中国新闻网很难有一项科技的发展像人工智能一样令人既期待又不安。若机器拥有了“自主意识”&#xff0c;人类将面对一个怎样的世界&#xff1f;在各类科幻作品中&#xff0c;人们的探讨层出不穷。和天马行空的文学想象不同&#xff0c;有着“AI女神”之称的华…

Java Web开发技术详解~MIME类型

MIME&#xff08;Multipurpose Internet Mail Extension&#xff09;是指多用途网络邮件扩展协议&#xff0c;这里的邮件不单纯值E-Mail&#xff0c;还可以包括通过各种应用层协议在网络上传输的数据。 遵守MIME协议的数据类型统称为MIME类型。在HTTP请求头和HTTP响应头中都有一…

Microsoft Visual Studio Code

Microsoft Visual Studio Code 中文手册&#xff1a;https://code.visualstudio.com/docs 官方快捷键大全&#xff1a;https://code.visualstudio.com/docs/customization/keybindings 第一次使用 VS Code 时你应该知道的一切配置&#xff1a;https://zhuanlan.zhihu.com/p/62…

利用HoloLens进行无人船舶驾驶!微软日本概念视频

来源&#xff1a;新浪游戏&#xff0c;AR联盟等平台微软日本公司最近推出一个新的概念视频&#xff0c;它展示了HoloLens将如何在相对不久的将来用于自动船舶驾驶上。尽管HoloLens主要是面向开发者和研究人员&#xff0c;但这项设备是站在向我们展示AR潜能的最前沿。最新的例子…

teamviewer企业版 添加计算机,teamviewer添加常用控制电脑列表的操作步骤

最近有不少的teamviewer用户们&#xff0c;会询问小编怎么teamviewer今日在这篇文章内小编就为你们带来了teamviewer添加常用控制电脑列表的操作步骤。teamviewer添加常用控制电脑列表的操作步骤首先我们注册一个TeamViewer账号&#xff1a;当我们注册账号后在右边登陆&#xf…

Spring Data JPA 从入门到精通~@EntityListeners注解示例

被Prepersist注解的方法 &#xff0c;完成save之前的操作。 被Preupdate注解的方法 &#xff0c;完成update之前的操作。 被PreRemove注解的方法 &#xff0c;完成remove之前的操作。 被Postpersist注解的方法 &#xff0c;完成save之后的操作。 被Postupdate注解的方法 &#…

干货|重磅发布:人工智能行业应用价值报告(PDF报告下载)

来源&#xff1a;机器人大讲堂报告下载&#xff1a;https://pan.baidu.com/s/1QEUOHqhQvxs9hEY6NLzPPg未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评…

ubuntu修改键盘映射

ubuntu修改键盘映射 通过xmodmap -pk 命令找到右shift键得keycode&#xff0c;打算将右shift映射到我笔记本的等号键去&#xff0c;因为笔记本上的等号键还具有加号键得功能&#xff0c;所以需要以下命令&#xff1a; xmodmap -e “keycode 62 equal plus” 62是右shift的keyc…

全球卫星导航 看中国“北斗”

来源&#xff1a;光明日报 作者&#xff1a;袁于飞2017年12月3日&#xff0c;第四届世界互联网大会世界互联网领先科技成果发布活动在浙江乌镇举行&#xff0c;中国卫星导航系统管理办公室主任冉承其介绍北斗卫星导航系统。新华社记者 孟鼎博摄3月30日&#xff0c;我国在西昌卫…

逻辑思维强的人适合学计算机不,逻辑思维强的人适合什么工作?

逻辑思维强的人适合什么工作?逻辑思维题内容&#xff1a;逻辑思维是人的理性认识阶段&#xff0c;人运用概念、判断、推理等思维类型反映事物本质与规律的认识过程。是人们将感性认识提升为理性认识的必要能力。那么逻辑思维强的人适合什么工作呢?逻辑性强的人适合做什么1.逻…

ADSL 拨号代理的搭建

From&#xff1a;崔庆才 - 轻松获得海量稳定代理&#xff01;ADSL拨号代理的搭建 我们尝试维护过一个代理池。代理池可以挑选出许多可用代理&#xff0c;但是常常其稳定性不高、响应速度慢&#xff0c;而且这些代理通常是公共代理&#xff0c;可能不止一人同时使用&#xff0c;…

用AlphaGo设计材料合成实验

来源&#xff1a;曾林的科学网博客AlphaGo下围棋连挫顶尖高手最终孤独求败的故事几乎家喻户晓。这也引发了大家对人工智能的能力的广泛思考。在科学研究领域&#xff0c;比如说合成实验设计&#xff0c;传统的做法不外乎是依靠经验不断的尝试。纵然会有一些热力学基本规律作为指…

app store 服务器维护,AppStore无法连接怎么办?几个小方法教你解决问题

原标题&#xff1a;AppStore无法连接怎么办&#xff1f;几个小方法教你解决问题苹果用户都知道&#xff0c;AppStore我们下载应用的地方&#xff0c;无论是自带软件还是第三方软件都能在这里找到。但是有时候我们会遇上AppStore无法理解的问题&#xff01;简单来说&#xff0c;…