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

WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容简介  在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任何有用的功能。  这篇文章里面,我们将实现对选项卡里面的内容和功能实现自定义。将自定义Page作为选项卡内容Page定义  Page页面的Xaml代码如下:

大家好,又见面了,我是你们的朋友全栈君。

简介

  在前面一篇文章里面,我们实现了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 >的事件处理句柄。
  我们自定义LayoutAnchorableClosing事件处理句柄如下:  

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或者浏览器的选项卡效果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162138.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java和Python的区别及工资对比,到底该学哪个?[通俗易懂]

    Java和Python的区别及工资对比,到底该学哪个?[通俗易懂]不知不觉,2019年的第三季度也快要结束了!随着互联网的发展,人工智能、语音技术、区块链等技术不断发挥着重要作用时,大家一直都在追逐着、猜测着2020年什么技术会火,却忽略掉了眼前的事情。近日有位博主做出了9月份关于程序员工资统计:·Java工程师工资·Python工程师工资自从Python火爆全球后,一直以来都被拿来和Java相比,从以上数据可以看出:Python薪资比Java会…

    2022年7月7日
    25
  • PHP导入excel数据到MYSQL

    这里介绍一个直接将excel文件导入mysql的例子。我花了一晚上的时间测试,无论导入简繁体都不会出现乱码,非常好用。PHP-ExcelReader,下载地址:http://sourceforge.

    2021年12月24日
    61
  • docker pull image 打tag

    docker pull image 打tag

    2021年5月14日
    140
  • c#byte类型转换成string_java字符串转byte数组

    c#byte类型转换成string_java字符串转byte数组http://www.myexception.cn/c-sharp/333084.htmlC#codebyte[]mybytes=newbyte[64]Encoding.GetEncoding(“GB2312”).GetString(mybytes).TrimEnd(‘\0’);

    2025年11月11日
    3
  • 【STM32】HAL库 STM32CubeMX教程十二—IIC(读取AT24C02 )

    【STM32】HAL库 STM32CubeMX教程十二—IIC(读取AT24C02 )IIC简介IIC(Inter-IntegratedCircuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。PS:这里要注…

    2022年6月8日
    60
  • Android开发规范「建议收藏」

    1.java代码中不出现中文,最多注释中可以出现中文2.局部变量命名、静态成员变量命名只能包含字母,名字中每个单词首字母都为大写(第一个单词首字母除外),其他都为小写3.常量命名只能包含字母和_,字母全部大写,单词之间用_隔开4.layout中的id命名命名模式为:view缩写_模块名称_view的逻辑名称view的缩写详情如下LayoutView:lvRela

    2022年3月9日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号