wpf 中给DataGrid控件增加边框

进来做一个打印功能。需要展示,客户的车牌号,物料名称,毛重,净重,单个文本框是可以带有边框的。但是不好对齐。
整体的布局采用DataGrid来试下。
但是 DataGrid本身的ShowLine样式为虚线,切不美观。
所以需要自定义。
这里用到 wpf 中的附加属性。 RegisterAttached
下面代码展示 wpf DataGrid中使用附加属性增加边框。
···
public class GridLineHelper
{
public static bool GetShowBorder(DependencyObject obj)
{
return (bool)obj.GetValue(ShowBorderProperty);
}

  1. public static void SetShowBorder(DependencyObject obj, bool value)
  2. {
  3. obj.SetValue(ShowBorderProperty, value);
  4. }
  5. public static readonly DependencyProperty ShowBorderProperty =
  6. DependencyProperty.RegisterAttached("ShowBorder", typeof(bool), typeof(GridLineHelper), new PropertyMetadata(OnShowBorderChanged));
  7. //事件处理,需要手工编写,必须是静态方法
  8. private static void OnShowBorderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  9. {
  10. var grid = d as Grid;
  11. string name = grid.Name;
  12. if ((bool)e.OldValue)
  13. {
  14. grid.Loaded -= (s, arg) => { };
  15. }
  16. if ((bool)e.NewValue)
  17. {
  18. grid.Loaded += (s, arg) =>
  19. {
  20. //根据Grid中子控件的个数去添加边框,同时考虑合并的情况
  21. var controls = grid.Children;
  22. var count = controls.Count;
  23. for (int i = 0; i < count; i++)
  24. {
  25. var item = controls[i] as FrameworkElement;
  26. var border = new Border()
  27. {
  28. BorderBrush = new SolidColorBrush(Colors.LightGray),
  29. BorderThickness = new Thickness(1)
  30. };
  31. var row = Grid.GetRow(item);
  32. var column = Grid.GetColumn(item);
  33. var rowspan = Grid.GetRowSpan(item);
  34. var columnspan = Grid.GetColumnSpan(item);
  35. Grid.SetRow(border, row);
  36. Grid.SetColumn(border, column);
  37. Grid.SetRowSpan(border, rowspan);
  38. Grid.SetColumnSpan(border, columnspan);
  39. grid.Children.Add(border);
  40. }
  41. };
  42. }
  43. }
  44. }

···

增加以上方法后。在xaml中使用附加属性就能够正确显示 边框了。

2024-07-02 10:37:05  user 阅读(111) 评论(0) 标签:C#,wpf,DataGrid控件,边框,附加属性。 分类:C#