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_新浪博客相关推荐

  1. WPF TextBlock自定义内容_se7en3_新浪博客

    要用到WPF打印,在画界面的时候一段文字内需要有空格,下划线填空,如果用多个TextBlock或者Label拼接的话放在WarpPanel里面排列会因为控件长度问题产生有的行没填满就换行. 只能放在一 ...

  2. WPF网络图片保存编辑_se7en3_新浪博客

    WPF中,原来的图片保存方法会报异常, 以下方法 保存源自网络的图片,编辑包括变成黑白色,在图片上写文字. 链接 http://blog.csdn.net/johnsuna/article/detai ...

  3. WPF圆角按钮及触发背景变更_se7en3_新浪博客

    WPF Button自定义Template并在ControlTemplate.Triggers定义背景变更 转http://www.cnblogs.com/junbird-nest/archive/2 ...

  4. WPF无弹窗打印_se7en3_新浪博客

    项目打印小单,不想弹窗 public class PrintDialogHelper     {         private const string PrintServerName = &quo ...

  5. SqlParameter in (@ids)_se7en3_新浪博客

    直接传入在将 varchar 值 '1,2,3,4,5,6,7,8' 转换成数据类型 int 时失败. SqlParameter会在编译时加上''变成varchar,使用charindex解决. WH ...

  6. [转]移动IIS7.5默认inetpub目录_se7en3_新浪博客

    老外写的  批处理文件 moveiis7root.bak ::批处理开始 REM PLEASE BE AWARE: SERVICING (I.E. HOTFIXES AND SERVICE PACKS ...

  7. 《将博客搬至CSDN》_se7en3_新浪博客

    算了,笔记还是丢到CSDN去吧 https://blog.csdn.net/stoco

  8. Asp.net WebApi跨域_se7en3_新浪博客

    WebApi需要跨域访问,但又不想用jsonp 1.在 Nuget里 联机搜索安装 Microsoft.AspNet.WebApi.Cors 2.App_Start/WebApiConfig里加入 R ...

  9. powerdesigner中name属性变为注释_se7en3_新浪博客

    数据库设计的时候用的PowerDesigner,概念模型生成物理模型的时候想根据 字段名称 生成数据库注释. 找到这个 http://blog.sina.com.cn/s/blog_4cef5c7b0 ...

最新文章

  1. CT片居然可以这么玩:用头部CT断层扫描片复原三维头像
  2. php的v_PHPV是什么意思
  3. 订阅号助手App发布 手机也能管理公众号了
  4. O(n)级选排名第k位数(附上算法复杂度分析)
  5. Linux定时运行程序脚本
  6. mapgis编辑属性结构编辑不了_MapGIS67操作手册(3-17)MapGIS67编辑线属性结构的方法...
  7. 进程间通信程序设计1
  8. 开挂程序员 Pat Gelsinger 如何重整英特尔?
  9. UNIX 时间戳 C#
  10. android中播放gif动画之三
  11. 牛逼!Python分析5万多场英雄联盟比赛,教你轻松预测胜负!
  12. MIL图像库的使用——配合图像采集卡
  13. m-bom,p-bom,e-bom 这是什么意思
  14. ArcGIS裁剪shp时输出结果为空
  15. gcf,gca,gco的区别
  16. Java LocalDate类| 带示例的getMonth()方法
  17. mybatis中的事务------我的笔记M11
  18. 大三期末前端页面开发论文
  19. PCL估计点云的表面法向量
  20. 离线语音的自定义配置步骤

热门文章

  1. HTML设置背景图片
  2. Reac生命周期钩子之getSnapshotBeforeUpdate
  3. 驱动字库芯片GT23L24M0140
  4. 杀人 真心话大冒险 起底
  5. react native Android 键盘将底部导航栏/按钮顶起
  6. 被误以为外国佬开发的4款国产软件,早年默默无闻,如今声名鹊起
  7. 线程编程——经典案例
  8. C/C++对汉字的读取
  9. ubuntu14.04+cuda7.0+opencv2.4.9
  10. Unreal Engin_画廊制作笔记 _004灯光处理,添加灯光