微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为WPF和Silverlight的Grid添加边框线

为WPF和Silverlight的Grid添加边框线(原文链接)


在此源代码的基础上,经过简单修改,保证了边框线条宽度统一.

修改后的源代码

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace SilverlightApplicationGridBorderSample
{
    /// <summary>
    /// 为Grid添加一个特殊功能
    /// 作者:陈希章
    /// 反馈:[email protected]
    /// </summary>
    public class GridHelper
    {

        //请注意:可以通过propa这个快捷方式生成下面三段代码

        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) =>
                {
                    //这种做法自动将控件移动到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);

                        Border border = new Border();
                        border.BorderBrush = new SolidColorBrush(Colors.LightGray);

                        //保证边框线条宽度统一
                        if ((0 == (int)row) && (0 == (int)column))
                        {
                            //第一行第一列
                            border.BorderThickness = new Thickness(1,1,1);
                        }
                        else if (0 == (int)row)
                        {
                            //第一行
                            border.BorderThickness = new Thickness(0,1);
                        }
                        else if (0 == (int)column)
                        {
                            //第一列
                            border.BorderThickness = new Thickness(1,1);
                        }
                        else
                        {
                            //其它行列,即除去第一行,第一列以为的所有单元格
                            border.BorderThickness = new Thickness(0,1);
                        }
                        border.Padding = new Thickness(2);
                        //{
                        //    BorderBrush = new SolidColorBrush(Colors.LightGray),//    BorderThickness = new Thickness(1),//    Padding = new Thickness(2)
                        //};
                        
                        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);
                    }
                };
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐