zoukankan      html  css  js  c++  java
  • WPF展开/折叠效果实现

      文笔不好,将就看代码吧,非常简单的一个实现,左右两个Grid加了颜色为了更方便看到效果。

    <Window x:Class="exSplitter.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <!--GridSplitter样式-->
            <Style x:Key="GridSplitterPreviewStyle">
                <Setter Property="Control.Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Rectangle Fill="#80000000"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style x:Key="GridSplitterStyle1" TargetType="{x:Type GridSplitter}">
                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                <Setter Property="PreviewStyle" Value="{StaticResource GridSplitterPreviewStyle}"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GridSplitter}">
                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                                <Grid>
                                    <Button Name="btnExpend"  Content=":" VerticalAlignment="Center" Height="50" Panel.ZIndex="0" Cursor="Hand"/>
                                </Grid>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Window.Resources>
        <Grid Name="grdWorkbench">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.282*"/>
                <ColumnDefinition Width="6"/>
                <ColumnDefinition Width="0.718*"/>
            </Grid.ColumnDefinitions>
            <Grid Name="grd1"  Margin="0" Background="#FFD8D8D8"/>
            <GridSplitter x:Name="gsSplitterr" Grid.Column="1" HorizontalAlignment="Stretch" Margin="0" Background="#FF9F9F9F" Style="{DynamicResource GridSplitterStyle1}"/>
            <Grid Name="grd2"  Grid.Column="2" Margin="5,0,-5,0" Background="#FFEBF5F7"/>
    
        </Grid>
    </Window>

    后台代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace exSplitter
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            GridLength m_WidthCache;
    
            public MainWindow()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
            }
    
            void MainWindow_Loaded(object sender, RoutedEventArgs e)
            {
                //获取GridSplitterr的cotrolTemplate中的按钮btn,必须在Loaded之后才能获取到
                Button btnGrdSplitter = gsSplitterr.Template.FindName("btnExpend", gsSplitterr) as Button;
                if (btnGrdSplitter != null)
                    btnGrdSplitter.Click += new RoutedEventHandler(btnGrdSplitter_Click);
            }
    
    
            void btnGrdSplitter_Click(object sender, RoutedEventArgs e)
            {
                GridLength temp = grdWorkbench.ColumnDefinitions[0].Width;
                GridLength def = new GridLength();
                if (temp.Equals(def))
                {
                    //恢复
                    grdWorkbench.ColumnDefinitions[0].Width = m_WidthCache;
                }
                else
                {
                    //折叠
                    m_WidthCache = grdWorkbench.ColumnDefinitions[0].Width;
                    grdWorkbench.ColumnDefinitions[0].Width = def;
                }
            }
        }
    }

     代码:https://files.cnblogs.com/kooleven/exSplitter.rar

  • 相关阅读:
    .net framework v4.5.2
    sql数据库不允许保存更改和保存失败解决方法
    如何查看笔记本电脑型号
    Premiere 5.0/5 .5菜单详解
    Python编辑器英文菜单的中文翻译及解释
    SqlServer--常用数据查询
    pycharm上方菜单栏不见了如何恢复
    笔记本电脑的f1到f12怎么按
    C#的访问权限
    封装,继承和多态知识点汇总
  • 原文地址:https://www.cnblogs.com/kooleven/p/3034395.html
Copyright © 2011-2022 走看看