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

相关文章

小技巧绕过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

LibSVM学习(六)——easy.py和grid.py的使用

我们在“LibSVM学习(一)”中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的。其中,常用到的是easy.py和grid.py两个文件。其实,网上也有相应的说明,但很不系统,下面结合本人的经验,对使用方法做个说明。        这两个文件都要用python(可以在http://www.python.org上下载到,需要安装)和绘图工具gnup

搜狗浏览器打开CSDN博客排版错乱问题解决

之前发生过几次,不知道什么原因。 今天一直用着好好的,打开一个csdn连接,显示404,博文被删除了,于是就用百度快照打开试试,百度快照打开显示的排版很乱也没找到有用信息。 后面再浏览CSDN博客就排版错乱,显示一个大大二维码图片。 尝试删除IE缓存无效,使用谷歌浏览是好的。 基本锁定就是搜狗缓存导致的,于是找如何删除搜狗缓存   清除后恢复正常

828华为云征文|基于华为云Flexus云服务器X实例部搭建Halo博客平台

华为云征文|基于华为云Flexus云服务器X实例部搭建Halo博客平台 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Halo介绍2.1 Halo 简介2.2 Halo 特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、购买华为云Flexus云服务器X实例4.

WPF入门到跪下 第十三章 3D绘图 - 3D绘图基础

3D绘图基础 四大要点 WPF中的3D绘图涉及4个要点: 视口,用来驻留3D内容3D对象照亮部分或整个3D场景的光源摄像机,提供在3D场景中进行观察的视点 一、视口 要展示3D内容,首先需要一个容器来装载3D内容。在WPF中,这个容器就是Viewport3D(3D视口),它继承自FrameworkElement,因此可以像其他元素那样在XAML中使用。 Viewport3D与其他元素相

缓存的常见问题 以及解决博客文章

1.jedispool 连 redis 高并发卡死  (子非鱼yy) https://blog.csdn.net/ztx114/article/details/78291734 2. Redis安装及主从配置 https://blog.csdn.net/ztx114/article/details/78320193 3.Spring中使用RedisTemplate操作Redis(sprin

[置顶] IT牛人博客

团队技术博客 淘宝UED淘宝用户体验团队淘宝核心系统淘宝核心系统团队博客阿里巴巴数据库团队专注数据库管理开发运维淘宝通用产品专注JAVA技术淘宝QA致力于做测试的行业标准淘宝搜索技术关注技术 关注搜索量子恒道专注大数据统计百度搜索研发关注搜索相关技术EMC中国研究院关注于云计算和大数据贰号楼肆层阿里巴巴平台技术部阿里数据平台阿里巴巴数据平台百度技术分享交流百度的互联网技术编码者说腾讯滴技术团队腾

为什么你应该从现在开始就写博客---刘未鹏

(一)为什么你应该(从现在开始就)写博客 用一句话来说就是,写一个博客有很多好处,却没有任何明显的坏处。(阿灵顿的情况属于例外,而非常态,就像不能拿抽烟活到一百岁的英国老太太的个例来反驳抽烟对健康的极大损伤一样) 让我说得更明确一点:用博客的形式来记录下你有价值的思考,会带来很多好处,却没有任何明显的坏处。Note:碎碎念不算思考、心情琐记不算思考、唠唠叨叨也不算思考、没话找话也不算思考

游戏开发者有必要写博客的6大原因

为什么你要写博客?在本文中我将分析为何写博客在游戏产业中如此有效的 6 大原因。 假设你是资深的游戏开发者、制作、发行商、二年级学生、测试者、设计师、程序员、美术师或者编曲者。你的爱好伴随着许多的技艺。每个人完成一款游戏的过程,方法都不同,这里也充满许多值得我们学习的有趣瞬间。当然你可以继续坚守自己的看法。但我还是看到了许多低调的开发者们在挣扎着。 1. 贡献 我的观点中最重要的一方面便是你