原文: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. IAdjustCountOption--动态设置recycleView的itemCount(不须要改动数据源)

    概述 RecycleViewUtil是新增的一个主要针对RecycleView的一个工具类.该工具类中提供了部分RecycleView可能会使用到的方法,当中也包含了一些用来增强HeaderRecyc ...

  2. adb常用命令 分类: H1_ANDROID 2013-09-08 15:22 510人阅读 评论(0) 收藏

    安装软件  adb install apk文件名称.apk  重新安装该软件  adb install -r apk文件名称.apk  卸载apk软件  adb uninstall apk包名.apk ...

  3. 在shell脚本中调用sqlplus 分类: H2_ORACLE 2013-06-23 13:01 1437人阅读 评论(0) 收藏

    #!/bin/bash sqlplus dc_file_data_js/dc_file_data_js << EOF1 set linesize 500; set pagesize 100 ...

  4. [tmux] Handle history in tmux sessions

    In this lesson, we'll look at how to manage your history between tmux sessions, and ensure that your ...

  5. <Linux> Xen虚拟机镜像的安装

    了解系统安装在哪个磁盘上:fdisk -l 建立存放虚拟机镜像的目录:mkdir /mnt/vmx 更改文件系统格式: mkfs -t ext4 /dev/sda或者/dev/sdb(系统不在的那个硬 ...

  6. 访问Ext.ComponentMgr中的组件对象

    Ext.Component是所有Ext组件的基类,所有组件被注册在布局管理器中Ext.ComponentManager, 这样就可以通过Ext.getCmp随时被引用,每种组件都有特定的类型,是Ext ...

  7. Codeforces Round #313 (Div. 2) 560C Gerald&#39;s Hexagon(脑洞)

    C. Gerald's Hexagon time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. Dubbo服务框架解析(二)

    本节介绍dubbo-common,dubbo-common是公共逻辑模块,包含Util类.通用模型,是其他模块的基础. 扩展机制 SPI SPI是扩展点的注解.标注在类型上.全部的扩展点须要通过SPI ...

  9. 【codeforces 750E】New Year and Old Subsequence

    time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  10. Qt for WebAssembly

    To complete the list of Qt framework items, let’s talk a bit about our ongoing research of Qt for We ...