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 >的事件处理句柄。
  我们自定义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或者浏览器的选项卡效果。

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

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

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


相关推荐

  • 移位寄存器实现序列检测-Verilog「建议收藏」

    移位寄存器实现序列检测-Verilog「建议收藏」//移位寄存器实现10010检测moduleDetect_10010( inputclk, inputrst_n, inputdata_in, outputreg[4:0]data_out, outputflag);always@(posedgeclkornegedgerst_n)begin if(!rst_n) data_out<=5’d0; else data_out<=({data_out[3:0],data_in

    2022年7月16日
  • 服务器知识_服务器个人买能干什么

    服务器知识_服务器个人买能干什么一服务器知识1.1电脑所谓的电脑就是一种计算机,而计算机其实是:『接受使用者输入指令与资料,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的资讯』。因此,只要有输入设备(不管是键盘还

    2022年8月1日
  • 百度消息中心页面转码失效

    百度消息中心页面转码失效

    2021年8月18日
  • 我为什么放弃Go语言

    我为什么放弃Go语言我为什么放弃Go语言?有好几次,当我想起来的时候,总是会问自己:这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。开门见山地说,我当初放弃Go语言,就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论,但是我有足够详实的客观的论据。

    2022年6月30日
  • Latex排版之公式换行,公式左对齐[通俗易懂]

    Latex排版之公式换行,公式左对齐[通俗易懂]公式换行\begin{equation}\begin{aligned}H(z_i,z_j)&=D_{KL}(N_j\VertN_i)\\&=\frac{1}{2}(log\frac{|\Sigma_j|}{\Sigma_i}-l+tr(\Sigma_i^{-1}\Sigma_j)+(\mu_i-\mu_j)^T\Sigma_i^{-1}(\mu_i-\mu_j))\end{aligned}\end{equation}其中\begin{aligned}

    2022年5月12日
  • matlab画圆的命令_matlab画矩形和matlab画圆「建议收藏」

    matlab画圆的命令_matlab画矩形和matlab画圆「建议收藏」今天在用MATLAB编程的时候,用到了已知圆心和半径,画圆的程序,上网搜了一下,主要有下面两种,在这里总结一下:(这里我都是放在函数中做的,想画多个圆的话可以加个for循环调用一下函数,或者直接用向量做都是可以的,在这里我不在多说)第一种:function[]=circle(x,y,r)rectangle(‘Position’,[x-r,y-r,2*r,2*r],’Curvature’,…

    2022年6月19日

发表回复

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

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