原文:C#(WPF)为Grid添加实线边框。

相信大家在做WPF项目的时候,都会用到Grid这个布局控件,一般情况下,如果只是为了布局,那就不需要显示它的边框,但是也有特殊需求,如果把它当做表格来使用,那就需要为它添加实线边框。下面帖代码:

using System.Windows;

using System.Windows.Controls;

using System.Windows.Media;

namespace WPFStart

{

    ///

    ///
为Grid添加的一个特殊功能,实线边框

    ///

    public class
GridHelper

    {

       
//边框的宽度

       
static double myBorderWidth = 1;

public static double GetBorderWidth(DependencyObject obj)

       
{

           
return (double)obj.GetValue(BorderWidthProperty);

       
}

public static void SetBorderWidth(DependencyObject obj, double
value)

       
{

           
obj.SetValue(BorderWidthProperty, value);

       
}

public static readonly DependencyProperty BorderWidthProperty
=

           
DependencyProperty.RegisterAttached("BorderWidth", typeof(double),
typeof(GridHelper), new
PropertyMetadata(OnBorderWidthChanged));

private static void OnBorderWidthChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)

       
{

           
myBorderWidth = (double)e.NewValue;

       
}

public static bool GetShowBorder(DependencyObject obj)

       
{

           
return (bool)obj.GetValue(ShowBorderProperty);

       
}

public static void SetShowBorder(DependencyObject obj, bool
value)

       
{

           
obj.SetValue(ShowBorderProperty, value);

       
}

public static readonly DependencyProperty ShowBorderProperty
=

           
DependencyProperty.RegisterAttached("ShowBorder", typeof(bool),
typeof(GridHelper), new PropertyMetadata(OnShowBorderChanged));

//这是一个事件处理程序,需要手工编写,必须是静态方法

       
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 += (s, arg) =>

               
{

                   
//根据Grid的顶层子控件的个数去添加边框,同时考虑合并的情况

                   
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 border = new Border();

                       
border.BorderBrush = new SolidColorBrush(Colors.White);

if (row == grid.RowDefinitions.Count - 1 && column ==
grid.ColumnDefinitions.Count - 1)

                           
border.BorderThickness = new Thickness(myBorderWidth);

                       
else if (row == grid.RowDefinitions.Count - 1)

                           
border.BorderThickness = new Thickness(myBorderWidth,
myBorderWidth, 0, 0);

                       
else if (column == grid.ColumnDefinitions.Count - 1)

                           
border.BorderThickness = new Thickness(myBorderWidth,
myBorderWidth, myBorderWidth, 0);

                       
else

                           
border.BorderThickness = new Thickness(myBorderWidth,
myBorderWidth,0, 0 );

Grid.SetRow(border, row);

                       
Grid.SetColumn(border, column);

                       
Grid.SetRowSpan(border, rowspan);

                       
Grid.SetColumnSpan(border, columnspan);

                       
grid.Children.Add(border);

                   
}

               
};

           
}

       
}

    }

}

在项目中新建这个类,在XAML页面引用设置属性时,需要添加
“xmlns:ext="clr-namespace:WPFGrid(项目名称)"“,“
ext:GridHelper.ShowBorder="true"”这里就是设置边框是否显示了。

******WPF XAML技术交流群:477319939******

C#(WPF)为Grid添加实线边框。的更多相关文章

  1. 为WPF和Silverlight的Grid添加边框线(zz)

      Grid是WPF和Silverlight中的一个重要的布局元素,其他的布局元素还有StackPanel, Canvas, Border等等.从字面上说,Grid是一个表格的意思,它的使用也确实很方 ...

  2. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  3. WPF中Grid实现网格,表格样式通用类(转)

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  4. WPF中Grid布局

    WPF中Grid布局XMAl与后台更改,最普通的登录界面为例. <Grid Width="200" Height="100" > <!--定义 ...

  5. [WPF] 使用Grid与GridSplitter排版布局

    原文:[WPF] 使用Grid与GridSplitter排版布局 前言 在開發應用程式時,一個很重要的工作項目就是設計使用者介面的排版布局.WPF中所提供的Grid控制項,讓開發人員擁有將版面分割為欄 ...

  6. border-radius是向元素添加圆角边框的方法

    border-radius:10px; /* 所有角都使用半径为10px的圆角 */ border-radius: 5px 4px 3px 2px; /* 四个半径值分别是左上角.右上角.右下角和左下 ...

  7. WPF中, 启用添加到RichTextBox中的控件

    原文:WPF中, 启用添加到RichTextBox中的控件   WPF中, 启用添加到RichTextBox中的控件                                           ...

  8. Knockout: 使用knockout validation插件进行校验, 给未通过校验的输入框添加红色边框突出显示.

    之前整理了三篇帖子: Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示. http://www.cnblogs.com/liuzhend ...

  9. Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.

    目的:使用knockout提供的机制实现输入框失去焦点后的校验工作,并使用CSS绑定给未通过校验的输入框添加红色边框突出显示. 步骤: 先在htm中添加.error的css样式, 并在输入框中的dat ...

随机推荐

  1. csdn博客栏目加入微博关注

    大家首先切换到:博客专栏,然后点击"加入专栏".然后直接复制下述代码就能够了: <a href="http://weibo.com/u/3247569660/hom ...

  2. 关于serialVersionUID的说明 分类: B1_JAVA 2014-05-24 11:02 1334人阅读 评论(0) 收藏

    1.为什么要使用serialVersionUID (1)对于实现了Serializable接口的类,可以将其序列化输出至磁盘文件中,同时会将其serialVersionUID输出到文件中. (2)然后 ...

  3. Java解析HTML之HTMLParser使用与详解 分类: C_OHTERS 2014-05-19 21:46 2309人阅读 评论(0) 收藏

    转自:http://free0007.iteye.com/blog/1131163 HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索.对于初学者还是要 ...

  4. JSON入门之二:org.json的基本用法 分类: C_OHTERS 2014-05-14 11:25 6001人阅读 评论(0) 收藏

    java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...

  5. arm交叉编译Valgrind

    1. wget http://valgrind.org/downloads/valgrind-3.9.0.tar.bz2 tar xvf valgrind-3.9.0.tar.bz2 cd valgr ...

  6. 微信小程序从零开始开发步骤(三)

    上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的.即点击底部的导航,会实现不同对应页面之间的切换. 我们先来看个我们要实现的底部导航栏的效果图:(三个导 ...

  7. [Django] The admin interface

    Now let's see how to access admin interface. 1. Create a super user which can access admin interface ...

  8. 【计算机视觉】OpenCV中直方图处理函数简述

    计算直方图calcHist 直方图是对数据集合的统计 ,并将统计结果分布于一系列提前定义的bins中.这里的数据不只指的是灰度值 ,统计数据可能是不论什么能有效描写叙述图像的特征. 如果有一个矩阵包括 ...

  9. active set method(激活集方法)

    在优化问题的求解中,如果待优化(最大最小)的目标函数,其解集受限于一组约束条件, g1(x)≥0,-,gk(x)≥0 约束条件定义着可行域(feasible region),对于可行域中的任一点 x ...

  10. web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...