WPF Grid边框_se7en3_新浪博客

2024-02-05 11:58

本文主要是介绍WPF Grid边框_se7en3_新浪博客,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WPF Grid布局自带的属性没有边框

1、头部引入​

xmlns:ext="clr-namespace:TS.HY.Manage"

2​、Grid设置属性

 

                ext:GridHelper.ShowBorder="True"

                ext:GridHelper.GridLineThickness="1"

                ext:GridHelper.GridLineBrush="black">

​3、GridHelper源码

public class GridHelper

    {

        public static readonly DependencyProperty ShowBorderProperty =

            DependencyProperty.RegisterAttached("ShowBorder", typeof(bool), typeof(GridHelper),

        new PropertyMetadata(OnShowBorderChanged));

        public static readonly DependencyProperty GridLineThicknessProperty =

            DependencyProperty.RegisterAttached("GridLineThickness", typeof(double), typeof(GridHelper),

            new PropertyMetadata(OnGridLineThicknessChanged));

        public static readonly DependencyProperty GridLineBrushProperty =

            DependencyProperty.RegisterAttached("GridLineBrush", typeof(Brush), typeof(GridHelper),

            new PropertyMetadata(OnGridLineBrushChanged));

        #region ShowBorder

        public static bool GetShowBorder(DependencyObject obj)

        {

            return (bool)obj.GetValue(ShowBorderProperty);

        }

        public static void SetShowBorder(DependencyObject obj, bool value)

        {

            obj.SetValue(ShowBorderProperty, value);

        }

        private static void OnShowBorderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)

        {

            var grid = d as Grid;

            if ((bool)e.OldValue)

            {

                grid.Loaded -= (s, arg) => { };

            }

            if ((bool)e.NewValue)

            {

                grid.Loaded += new RoutedEventHandler(GridLoaded);

            }

        }

        #endregion

        #region GridLineThickness

        public static double GetGridLineThickness(DependencyObject obj)

        {

            return (double)obj.GetValue(GridLineThicknessProperty);

        }

        public static void SetGridLineThickness(DependencyObject obj, double value)

        {

            obj.SetValue(GridLineThicknessProperty, value);

        }

        private static void OnGridLineThicknessChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)

        {

        }

        #endregion

        #region GridLineBrush

        public static Brush GetGridLineBrush(DependencyObject obj)

        {

            Brush brush = (Brush)obj.GetValue(GridLineBrushProperty);

            return brush == null ? Brushes.LightGray : brush;

        }

        public static void SetGridLineBrush(DependencyObject obj, Brush value)

        {

            obj.SetValue(GridLineBrushProperty, value);

        }

        private static void OnGridLineBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)

        {

        }

        #endregion

        private static void GridLoaded(object sender, RoutedEventArgs e)

        {

            Grid grid = sender as Grid;

            var row_count = grid.RowDefinitions.Count;

            var column_count = grid.ColumnDefinitions.Count;

            #region 支持grid cell元素与边框距离设置,但是方法是将cell内元素放到border中,先删除,再添加!

            var controls = grid.Children;

            var count = controls.Count;

            for (int i = 0; i < count; i++)

            {

                var item = controls[i] as FrameworkElement;

                var row = Grid.GetRow(item);

                var column = Grid.GetColumn(item);

                var rowspan = Grid.GetRowSpan(item);

                var columnspan = Grid.GetColumnSpan(item);

                var settingThickness = GetGridLineThickness(grid);

                Thickness thickness = new Thickness(settingThickness / 2);

                if (row == 0)

                    thickness.Top = settingThickness;

                if (row + rowspan == row_count)

                    thickness.Bottom = settingThickness;

                if (column == 0)

                    thickness.Left = settingThickness;

                if (column + columnspan == column_count)

                    thickness.Right = settingThickness;

                var border = new Border()

                {

                    BorderBrush = GetGridLineBrush(grid),

                    BorderThickness = thickness,

                    Padding = new Thickness(20)

                };

                Grid.SetRow(border, row);

                Grid.SetColumn(border, column);

                Grid.SetRowSpan(border, rowspan);

                Grid.SetColumnSpan(border, columnspan);

                grid.Children.RemoveAt(i);

                border.Child = item;

                grid.Children.Insert(i, border);

            }

            #endregion

        }

    }






转自:http://www.cnblogs.com/baijiakai/archive/2012/08/23/2652158.html​

这篇关于WPF Grid边框_se7en3_新浪博客的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/680835

相关文章

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

小程序button控件上下边框的显示和隐藏

问题 想使用button自带的loading图标功能,但又不需要button显示边框线 button控件有一条淡灰色的边框,在控件上了样式 border:none; 无法让button边框隐藏 代码如下: <button class="btn">.btn{border:none; /*一般使用这个就是可以去掉边框了*/} 解决方案 发现button控件有一个伪元素(::after