原文:WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容

简介

  在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任何有用的功能。

  这篇文章里面,我们将实现对选项卡里面的内容和功能实现自定义。

    完整系列

  ● 第一部分

  ● 第二部分

  ● 第三部分

  在Git中下载工程源码

将自定义Page作为选项卡内容

Page定义

  Page页面的Xaml代码如下:

<Page x:Class="AvalonProject.TestPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="TestPage"> <Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Right" FontSize="14" Text="用户名:"></TextBlock>
<TextBox Height="30" Grid.Column="1" Margin="5"></TextBox> <TextBlock VerticalAlignment="Center" Grid.Column="2" HorizontalAlignment="Right" FontSize="14" Text="年龄:"></TextBlock>
<TextBox Height="30" Grid.Column="3" Margin="5"></TextBox> <TextBlock VerticalAlignment="Center" Grid.Row="1" HorizontalAlignment="Right" FontSize="14" Text="性别:"></TextBlock>
<TextBox Height="30" Grid.Column="1" Grid.Row="1" Margin="5"></TextBox> <TextBlock VerticalAlignment="Center" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Right" FontSize="14" Text="是否单身狗:"></TextBlock>
<StackPanel Grid.Row="1" Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center">
<RadioButton Content="是"></RadioButton>
<RadioButton Content="否"></RadioButton>
</StackPanel>
<Button Name="btn_ShowInfo" Click="btn_ShowInfo_Click" Content="显示用户信息" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Height="30" Margin="5"></Button>
</Grid>
</Page>

 上面的Xaml代码对应的按钮点击事件代码如下:

        private void btn_ShowInfo_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("这是自定义的AvalonDock选项卡内容!");
}

将Page添加到AvalonDock标签

  在MainWindow.xaml.cs里面的item_AddNew_Click代码修改如下:

  

clickCount++;

            Frame frame = new Frame();
frame.Content = new TestPage(); LayoutAnchorable layOutAnc = new LayoutAnchorable() { Title = "新选项卡"+clickCount };
layOutAnc.Content = frame; layOutPane.Children.Add(layOutAnc);

运行程序,观察效果

  运行程序,效果如下:

  

  说明我们为AvalonDock标签添加的自定义内容成功!

为自定义标签添加退出验证

添加退出事件处理句柄

  我们希望用户在我们自定义的选项卡工作的时候,保存完所有信息后,才能够退出。因此我们需要对自定义选项卡添加退出的验证。

  从前面的AvalonDock可视化树形结构中,我们可以看到,所有的选项卡内容的承载容器都是LayoutAnchorable,因此我们只需要对其添加退出验证即可。

  观察LayoutAnchorable定义,我们发现有个名为Closing返回类型为System.EventHandler< CandelEventArgs >的事件处理句柄。

  我们自定义LayoutAnchorable的Closing事件处理句柄如下:  

private void Tab_Close(object sender, CancelEventArgs e)
{
if (true)
{
if (MessageBox.Show("还没有保存,是否要退出?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{ }
else
{
e.Cancel = true;
}
}
}

  在item_AddNew_Click代码修改如下:

LayoutAnchorable layOutAnc = new LayoutAnchorable() { Title = "新选项卡"+clickCount };
layOutAnc.Content = frame;
layOutAnc.Closing += Tab_Close;//添加退出事件处理句柄=>添加的代码

运行程序,观察效果

  运行程序,效果如下:

  

总结

  自此,我们已经比较完整地利用WPF+AvalonDock实现了类似于VS或者浏览器的选项卡效果。

WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容的更多相关文章

  1. Android动画效果之自定义ViewGroup添加布局动画

    前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...

  2. 微信小程序之动态添加、删除指定内容(view)和获取input值

    这次遇到个问题: 1. 动态的添加指定的view内容..嗯..很简单..wx:for就搞定 2. 动态添加的内容中有input,最终获取值的时候,要获取到所有input的值并且是一个数组..嗯.. 3 ...

  3. pytest自定义动态添加描述信息

    先上效果图: 修改pytest-html报告,分三部分. pytest执行目录新建conftest.py文件 import pytest from py._xmlgen import html fro ...

  4. 在jsp页面动态添加数据库中的内容

    工具:myeclipse+oracle11g 1.首先新建一个jsp页面. 2.在src目录下新建实体类User.java 3.创建BaseDao用来链接数据库 4.在pl/sql中创建存储过程 5. ...

  5. MVC动态添加文本框,后台使用FormCollection接收

    在"MVC批量添加,增加一条记录的同时添加N条集合属性所对应的个体"中,对于前台传来的多个TextBox值,在控制器方法中通过强类型来接收.使用FormCollection也可以接 ...

  6. WPF实现选项卡效果(2)——动态添加AvalonDock选项卡

    原文:WPF实现选项卡效果(2)--动态添加AvalonDock选项卡 简介 在前面一篇文章里面,我们使用AvalonDock实现了类似于VS的选项卡(或者浏览器的选项卡)效果.但是我们是通过xaml ...

  7. 通过jquery来实现文本框和下拉框动态添加效果,能根据自己的需求来自定义最多允许添加数量,实用的jquery动态添加文本框特效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. WPF:理解ContentControl——动态添加控件和查找控件

    WPF:理解ContentControl--动态添加控件和查找控件 我认为WPF的核心改变之一就是控件模型发生了重要的变化,大的方面说,现在窗口中的控件(大部分)都没有独立的Hwnd了.而且控件可以通 ...

  9. JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建

    1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...

随机推荐

  1. Android中对手机文件进行读写 分类: H1_ANDROID 2013-10-23 22:48 512人阅读 评论(0) 收藏

    参考张泽华视频 (一)读写手机内存卡中的文件 对手机中的文件进行读写操作,或者新增一个文件时,可直接使用openFileOutput  /  openFileInput 得到文件的输出.输入流. Fi ...

  2. Java NIO详细介绍

    不错的文章,推荐一下. http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html JavaNIO非堵塞技术实际是采取Re ...

  3. Java编程思想第四版 *第五章 个人练习

    练习3:(1)创建一个带默认构造器(即无參构造器)的类.在构造器中打印一条消息.为这个类创建一个对象.P116 public class Test{ public Test(){ System.out ...

  4. 【u021】广义斐波那契数列

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定数列的两系数p和q,以及数列的 ...

  5. 数据库迁移框架Flyway介绍

    官方文档 https://flywaydb.org/getstarted/firststeps/api[https://flywaydb.org/getstarted/firststeps/api] ...

  6. AndroidClipSquare安卓实现方形头像裁剪

    安卓实现方形头像裁剪 实现思路.界面可见区域为2层View 最顶层的View是显示层,主要绘制半透明边框区域和白色裁剪区域,代码比較easy. 第二层继承ImageView,使用ImageView的M ...

  7. HDU 4313 Matrix 树形dp

    题意: 给定n个点的树,m个黑点 以下n-1行给出边和删除这条边的费用 以下m个黑点的点标[0,n-1] 删除一些边使得随意2个黑点都不连通. 问删除的最小花费. 思路: 树形dp 每一个点有2个状态 ...

  8. SQL server添加链接服务器脚本

    ---恢复内容开始--- exec sp_addlinkedserver  'ZZSJK','','SQLOLEDB','192.168.10.22'  --链接服务器名称 ‘’ ip地址exec s ...

  9. 如何向数据库添加时同时返回ID

    我们在做项目开发时很多时候都需要数据库的增删改查,而添加数据后又想得到该项数据在数据库中的主键值,这里有一个非常方便的方法可以在插入数据的同时获得主键值. public void save(Perso ...

  10. TCL S960T刷机包 乐蛙OS5 稳定版 平滑 优化

    ROM简介 乐蛙OS5完美的最终稳定版 Ver14.10.17 温馨提示:一定要明确系统双成一个完整的包画刷入前开发版,否则会造成系统异常,请务必备份手机刷机前的信息和数据,刷机过程中,为了避免因数据 ...