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_新浪博客相关推荐
- WPF TextBlock自定义内容_se7en3_新浪博客
要用到WPF打印,在画界面的时候一段文字内需要有空格,下划线填空,如果用多个TextBlock或者Label拼接的话放在WarpPanel里面排列会因为控件长度问题产生有的行没填满就换行. 只能放在一 ...
- WPF网络图片保存编辑_se7en3_新浪博客
WPF中,原来的图片保存方法会报异常, 以下方法 保存源自网络的图片,编辑包括变成黑白色,在图片上写文字. 链接 http://blog.csdn.net/johnsuna/article/detai ...
- WPF圆角按钮及触发背景变更_se7en3_新浪博客
WPF Button自定义Template并在ControlTemplate.Triggers定义背景变更 转http://www.cnblogs.com/junbird-nest/archive/2 ...
- WPF无弹窗打印_se7en3_新浪博客
项目打印小单,不想弹窗 public class PrintDialogHelper { private const string PrintServerName = &quo ...
- SqlParameter in (@ids)_se7en3_新浪博客
直接传入在将 varchar 值 '1,2,3,4,5,6,7,8' 转换成数据类型 int 时失败. SqlParameter会在编译时加上''变成varchar,使用charindex解决. WH ...
- [转]移动IIS7.5默认inetpub目录_se7en3_新浪博客
老外写的 批处理文件 moveiis7root.bak ::批处理开始 REM PLEASE BE AWARE: SERVICING (I.E. HOTFIXES AND SERVICE PACKS ...
- 《将博客搬至CSDN》_se7en3_新浪博客
算了,笔记还是丢到CSDN去吧 https://blog.csdn.net/stoco
- Asp.net WebApi跨域_se7en3_新浪博客
WebApi需要跨域访问,但又不想用jsonp 1.在 Nuget里 联机搜索安装 Microsoft.AspNet.WebApi.Cors 2.App_Start/WebApiConfig里加入 R ...
- powerdesigner中name属性变为注释_se7en3_新浪博客
数据库设计的时候用的PowerDesigner,概念模型生成物理模型的时候想根据 字段名称 生成数据库注释. 找到这个 http://blog.sina.com.cn/s/blog_4cef5c7b0 ...
最新文章
- CT片居然可以这么玩:用头部CT断层扫描片复原三维头像
- php的v_PHPV是什么意思
- 订阅号助手App发布 手机也能管理公众号了
- O(n)级选排名第k位数(附上算法复杂度分析)
- Linux定时运行程序脚本
- mapgis编辑属性结构编辑不了_MapGIS67操作手册(3-17)MapGIS67编辑线属性结构的方法...
- 进程间通信程序设计1
- 开挂程序员 Pat Gelsinger 如何重整英特尔?
- UNIX 时间戳 C#
- android中播放gif动画之三
- 牛逼!Python分析5万多场英雄联盟比赛,教你轻松预测胜负!
- MIL图像库的使用——配合图像采集卡
- m-bom,p-bom,e-bom 这是什么意思
- ArcGIS裁剪shp时输出结果为空
- gcf,gca,gco的区别
- Java LocalDate类| 带示例的getMonth()方法
- mybatis中的事务------我的笔记M11
- 大三期末前端页面开发论文
- PCL估计点云的表面法向量
- 离线语音的自定义配置步骤
热门文章
- HTML设置背景图片
- Reac生命周期钩子之getSnapshotBeforeUpdate
- 驱动字库芯片GT23L24M0140
- 杀人 真心话大冒险 起底
- react native Android 键盘将底部导航栏/按钮顶起
- 被误以为外国佬开发的4款国产软件,早年默默无闻,如今声名鹊起
- 线程编程——经典案例
- C/C++对汉字的读取
- ubuntu14.04+cuda7.0+opencv2.4.9
- Unreal Engin_画廊制作笔记 _004灯光处理,添加灯光