WPF利用附加属性修改ShowGridLines效果的方法

  介绍

这篇文章主要介绍了WPF利用附加属性修改ShowGridLines效果的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

<强>前言

附加属性是说一个属性本来不属于某个对象,但由于某种需求而被后来附加上,也就是把对象放入一个特定环境后对象才具有的属性就称为附加属性,附加属性的作用就是将属性与数据类型解耦,让数据类型的设计更加灵活,举例,一个文本框被放在不同的布局容器中时就会有不同的布局属性,这些属性就是由布局容器为文本框附加上的,附加属性的本质就是依赖属性,二者仅仅在注册和包装器上有一点区别

小技巧,在大战中输入propa后,连按两次tab键,可以添加好一个附加属性的框架,继续按tab键,可以继续修改附加属性的内容

本文主要介绍的是关于WPF用附加属性修改ShowGridLines效果的相关内容、下面话不多说了,来一起看看详细的介绍吧。

<强> 1。思路主要代码

WPF的栅格线原本效果是虚线类型的。有时候需要设计成表格形式的,因此有了用附加属性来自动绘制边框线的想法。

思路:绘制线并添加到网格的孩子里,但效果并不理想,会出现锯齿,像素对齐,模糊等问题。

UseLayoutRounding=癋alse"
SnapsToDevicePixels=癟rue"

<代码> RenderOptions。EdgeModeProperty 貌似都没起作用。

于是想到了用边界来实现,简单又实用吧哈哈。

<强>大致思路如下:

绘制边界的左边框和上边框,在边界的时候考虑边界封闭,然后将边境平移一半的距离。这样边框就居中并且包围了所有的线。

 WPF利用附加属性修改ShowGridLines效果的方法

<强>主要代码如下:

using  System.Windows;   using  System.Windows.Controls;   using  System.Windows.Media;   namespace 用附加属性修改网格的边框   {   public  class  GridHelper   ,{   private 才能static  void  RefreshGrid (Grid 网格,int 线宽,,Brush 颜色)   {才能   ,,for  (var 小姐:=,grid.Children.Count 作用;1;,小姐:祝辞,0;,我——)   ,,{   ,,,var  child =, grid.Children[我];   ,,,var  bd =, child  as 边界;   ,,,if  (bd  !=, null ,,, bd.Tag  !=, null ,,, bd.Tag.ToString (),==,“gridline")   ,,,{   ,,,,grid.Children.Remove (bd);   ,,,}   ,,}   ,,var  rows =, grid.RowDefinitions.Count;   ,,var  cols =, grid.ColumnDefinitions.Count;   ,,//边界考虑   ,,if  (rows ==, 0)   ,,{   ,,,rows =, 1;   ,,}   ,,if  (cols ==, 0)   ,,{   ,,,cols =, 1;   ,,}   ,,//生成行列   ,,for  (var 小姐:=,0;,小姐:& lt;,行;,我+ +)   ,,{   ,,,for  (var  j =, 0;, j  & lt;,关口;,j + +)   ,,,{   ,,,,var  thick =, new 厚度(线宽,线宽,0,0);   ,,,,var  margin =, new 厚度(线宽/2 d,线宽/2 d, 0, 0);   ,,,,//边界考虑   ,,,,if (小姐:==,0)   ,,,,{   ,,,,,margin.Top =, 0;   ,,,,}   ,,,,if (小姐:==,rows 作用;1)   ,,,,{   ,,,,,thick.Bottom =,线宽;   ,,,,}   ,,,,if  (j ==, 0)   ,,,,{   ,,,,,margin.Left =, 0;   ,,,,}   ,,,,if  (j ==, cols 作用;1)   ,,,,{   ,,,,,thick.Right =,线宽;   ,,,,}   ,,,,var  bd =, new 边界   ,,,,{   ,,,,,BorderThickness =,厚,   ,,,,,Margin =,,   ,,,,,BorderBrush =,颜色,   ,,,,,Tag =,“gridline"   ,,,,};   ,,,,Grid.SetRow (bd,,我);   ,,,,Grid.SetColumn (bd, j);   ,,,,grid.Children.Add (bd);   ,,,}   ,,}   ,,grid.InvalidateArrange ();   ,,grid.InvalidateVisual ();   ,,}   ,   # region 线才能颜色//才能,Using  a  DependencyProperty  as 从而backing  store  for  LineColor只却;能够enables 动画,风格,,绑定,,等等……   public 才能;static  readonly  DependencyProperty  LineColorProperty =,,DependencyProperty.RegisterAttached (“LineColor",, typeof (刷),typeof  (GridHelper),   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

WPF利用附加属性修改ShowGridLines效果的方法