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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • perl正则表达式实现大写字母转小写字母

    perl正则表达式实现大写字母转小写字母这个功能不难,但是要求必须用s///的形式,而且后面不能加第三个参数,不能是s///g这样的形式。不过可以采用多个这样的表达式。例如 s/A/a/s/B/b/s/AB/ab/…………….最终就是要求所有这些表达式组合起来,使得不论输入多少个大写字符,都会被转化为小写。我在atftpd的pcre功能中需要我将大写的请求文件转化为小写,所以需要一个rules文件

    2022年5月6日
    72
  • Python爱心表白代码[通俗易懂]

    Python爱心表白代码[通俗易懂]调用turtle模块,然后在屏幕上画一个爱心,并在爱心的中间写上表白的话,爱心的右下角显示要表白的人,表白的话及要表白的人均可设置。画完爱心大约10秒,表白情话及需要表白的人均可输入中文,程序运行截图:importturtle#导入python中的画画工具包importtimedefLittleHeart():foriinrange(200):turtle.right(1)turtle.forward(2)love=input(‘请输入表白语

    2022年6月2日
    62
  • 表白代码vbs不同意无法关闭(vbs表白代码不同意按键会跑)

    代码网上很多,我找了两个,再加上一些套路,效果更好。代码1:msgbox”做我女朋友好吗”,vbQuestion,”在吗”msgbox(“房产写你名字”)msgbox(“保大”)msgbox(“我妈会游泳”)dimjdowhilej<1SelectCasemsgbox(“做我女朋友好吗”,68,”请郑重的回答我”)Case6j=1Case7msgbox(“再给你一次机会”)endSelectloopmsgbox(“我就知道你会同意的,哈哈哈哈

    2022年4月17日
    69
  • 数据库同步工具:ETL使用说明

    数据库同步工具:ETL使用说明1        打开ETL工具2        转换从数据库的表导出数据到另一个数据库的表。前提:两个数据库的表格结构相同2.1      新建转换文件->新建->转换2.2      配置输入2.2.1      拖动表输入到编辑界面输入:需要导出数据的数据库表格。在左侧导航栏里面,找到【输入】->【表输入】,如下图:将【表输入】拖动到编

    2022年6月16日
    145
  • k8s pod Evicted状态问题解决

    k8s pod Evicted状态问题解决kubectlgetpo-nkube-system-owide#查看pod运行状态信息可以看到有两个状态为驱赶,一般是磁盘空间不足了,清理slave磁盘空间后,状态正常

    2022年5月16日
    56
  • 01分布的方差和期望_01分布的期望和方差公式

    01分布的方差和期望_01分布的期望和方差公式   最后欢迎大家访问我的个人网站:1024s

    2022年9月17日
    4

发表回复

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

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