WPF WebBrowser+TabControl MVVM模式 简单应用 提供源码下载
这个程序是TabControl和Webbrowser的练手小程序
可达到练手目的有:
- MVVM设计模式的基本使用
- Binding(包括相对源[RelativeSource]绑定)的基本使用
- IE COM的基本使用
- 委托和事件基本使用
程序可实现的效果:
- 控制Webbrowser新窗口在TabItem中
- TabItem的标头为网页的标题
- TabItem可关闭网页
- 新开网页自动在前
效果GIF

技术要点:
Xaml
<Window x:Class="WPF_WebBrowser_TabControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF_WebBrowser_TabControl"
xmlns:data="clr-namespace:WPF_WebBrowser_TabControl.ViewModel"
mc:Ignorable="d"
Title="WPF WebBrowser 简易应用" Height="" Width="">
<Window.DataContext>
<data:WebPageModel/>
</Window.DataContext>
<Grid>
<!--控制TabControl的页面选择要通过SelectedItem的来选择
注意ViewModel中要实现INotifyPropertyChange接口-->
<TabControl SelectedItem="{Binding Index}" ItemsSource="{Binding WebBrowser}" Grid.ColumnSpan="" x:Name="TB">
<!--此处为TabItem的ItemTemplate-->
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding Web }"/>
</DataTemplate>
</TabControl.ContentTemplate>
<!--此处为TabItem的Header的模板-->
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="Red" Text="{Binding Title}"/>
<!--Button的命令绑定是相对源,使用路径来获取
因为TabControl的默认绑定源是Webbrowsr而不是Winodw的Datacontext-->
<Button CommandParameter="{Binding Index}" Command="{Binding RelativeSource={ RelativeSource Mode=FindAncestor,AncestorLevel=1,AncestorType=Window}, Path=DataContext.CloseTab}"
Height="" Margin="20,0,0,0">
<Image Source="/WPF WebBrowser TabControl;component/Image/取消.png" />
</Button>
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
</Grid>
</Window>
WPF WebBrowser+TabControl MVVM模式 简单应用 提供源码下载的更多相关文章
- 用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入 (源码下载)
最近研究了下服务号的服务器配置和企业号的回调模式.真正实现完后,觉得很简单,但一开始还是走了点弯路,所以写了个web程序,只用改下配置文件里的参数就可以直接用了.下面介绍下详细的用法以及实现步骤. 本 ...
- 玩转控件:重绘DEVEXPRESS中DateEdit控件 —— 让DateEdit支持只选择年月 (提供源码下载)
前言 上一篇博文<玩转控件:重绘ComboBox —— 让ComboBox多列显示>中,根据大家的回馈,ComboBox已经支持筛选了,更新见博文最后最后最后面. 奇葩 这两天遇到 ...
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
上篇博文我们介绍了mybatis的基本概念与原理,这篇博文我们通过Spring与Mybatis集成,开发一个简单用户增删改查的Web项目. 基本准备工作 1.安装JDK1.6以上版本,安装与配置 2. ...
- 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)
前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...
- EasyMvc--让MVC区域开发更Easy(提供源码下载)
核心: 主要利用MVC的区域功能,实现项目模块独立开发和调试. 目标: 各个模块以独立MVC应用程序存在,即模块可独立开发和调试. 动态注册各个模块路由. 一:新建解决方案目录结构 如图: 二:Eas ...
- 重磅来袭,开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载(转)
BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 啥话也不说了,直接上源码:下载源码(由于公司服 ...
- C编程风格的人机交互 -- CSHELL (提供源码下载)
记得上大学时,做C语言的程序都是用sdb来调试的:再后来有了gdb,同sdb差不多,不过就好用了很多.但终究还是有点遗憾.比如,程序里设计了几个函数,如果想测试下它们,就不得不再编写个测试函数,用各种 ...
- Android 上实现像微信一样的用Fragment来实现的Tab切页效果 提供源码下载
网有不少的例子,但是要么是像微信一样可是没有使用Fragment实现,要么是只实现了一个很简单的切换,没有下面的菜单页.这个例子有实现了,我觉得暂时够我用了##实现类:+ MainTabFragmen ...
- 最新版本的Struts2+Spring4+Hibernate4三大框架整合(截止2014-10-15,提供源码下载)
一. 项目名称:S2316S411H436 项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 + Quartz2.2.1 源代码下载地址: 基本版:ht ...
随机推荐
- 【转】SVN 与 GIT 详细对比
git和svn的详细对比 近期就[版本管理工具是否进行切换SVN->Git]的问题进行了讨论,于是对svn和Git进行了相关研究,进而梳理出Git的特点(优.缺点),最后将Git与SVN进行 ...
- iOS学习之UINavigationController详解与使用(三)ToolBar
1.显示Toolbar 在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [ ...
- 3D Math Keynote
[3DMathKeynote] 1.常用公式. 1)(A*B)^T = B^T*A^T. 2)(A*B)^-1 = B^-1*A^-1. 3)|A*B| = |A|*|B|. 4)|M^T|=|M ...
- 【Todo】Linux进程调度算法学习
参考这篇文章 http://blog.chinaunix.net/uid-27052262-id-3239260.html Linux支持三种进程调度策略,分别是SCHED_FIFO . SCHED_ ...
- 微信小程序(应用号)开发资源汇总整理
开源项目 wechat-weapp-gank - 微信小程序版Gank客户端 wechat-dribbble - 微信小程序-Dribbble wechatApp-demo - 微信小程序 DEMO ...
- JAVA数据结构实现原理
HashTable 线程安全, 内部函数被synchronized修饰,对象级的锁 HashMap 非线程安全, 需要tradeoff 空间和查找时间, 空间利用率低时,冲突少,查询效率高,反之空间利 ...
- 2-R型聚类
将相似的属性聚合在一起 clc, clear; % a = load('E:\a-建模\<数学建模算法与应用>课件资源\数学建模算法与应用\程序及数据\10第10章\gj.txt'); a ...
- Ubuntu14.04下opencv卸载与重装
参考链接:http://askubuntu.com/questions/334158/installing-opencv http://stackoverflow.com/questions/1313 ...
- Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 一. ...
- 取得MapReduce的Thread Dump
====2016/5/20: 经过上级指示,为了MR性能调优,需要截取MR的服务器的线程堆栈(Thread Dump) 战友介绍的方法是这样的: ①.使用ps命令[ps -ef | grep java ...