WPF中如何设置自定义控件(三)
���定义背景:前面讲过自定义圆角按钮和圆形按钮,这节主要将自定义背景色。
在以往的设置中我们的CornerRadius是一个值,
效果图:
然而实际上是可以设置四个值的,如果设置的是一个值,其实表示的是四个值是相同的,效果图同上。
如何设置不同的区域背景图呢,下面我先将效果图进行展示在进一步分析:
代码如下:
解析:主要是想做一个主界面,左边是菜单右边是主页内容。
考略到左右分割就是两列,因此我选择了图表控件,创建了两个 ;其中左边是绝对长度200,其余是右边。
左边当时想做一个不规则图形,因此在左边用包裹一个,方便后期修改,可以看到右上角和左下角都有个倒角,但是倒角的大小不一样;右边用包裹一个方便后期放自定义控件。
中CornerRadius的顺序是左上、右上、右下、左下。感兴趣的话可以自己实验一下。
源码:
using System.Windows.Media; using MS.Internal; using MS.Internal.PresentationFramework; using MS.Internal.Telemetry.PresentationFramework;
namespace System.Windows.Controls { public class Border : Decorator { private struct Radii { internal double LeftTop;
internal double TopLeft;
internal double TopRight;
internal double RightTop;
internal double RightBottom;
internal double BottomRight;
internal double BottomLeft;
internal double LeftBottom;
internal Radii(CornerRadius radii, Thickness borders, bool outer) { double num = 0.5 * borders.Left; double num2 = 0.5 * borders.Top; double num3 = 0.5 * borders.Right; double num4 = 0.5 * borders.Bottom; if (outer) { if (DoubleUtil.IsZero(radii.TopLeft)) { LeftTop = (TopLeft = 0.0); } else { LeftTop = radii.TopLeft + num; TopLeft = radii.TopLeft + num2; }
if (DoubleUtil.IsZero(radii.TopRight)) { TopRight = (RightTop = 0.0); } else { TopRight = radii.TopRight + num2; RightTop = radii.TopRight + num3; }
if (DoubleUtil.IsZero(radii.BottomRight)) { RightBottom = (BottomRight = 0.0); } else { RightBottom = radii.BottomRight + num3; BottomRight = radii.BottomRight + num4; }
if (DoubleUtil.IsZero(radii.BottomLeft)) { BottomLeft = (LeftBottom = 0.0); return; }
BottomLeft = radii.BottomLeft + num4; LeftBottom = radii.BottomLeft + num; } else { LeftTop = Math.Max(0.0, radii.TopLeft - num); TopLeft = Math.Max(0.0, radii.TopLeft - num2); TopRight = Math.Max(0.0, radii.TopRight - num2); RightTop = Math.Max(0.0, radii.TopRight - num3); RightBottom = Math.Max(0.0, radii.BottomRight - num3); BottomRight = Math.Max(0.0, radii.BottomRight - num4); BottomLeft = Math.Max(0.0, radii.BottomLeft - num4); LeftBottom = Math.Max(0.0, radii.BottomLeft - num); } } }
[CommonDependencyProperty] public static readonly DependencyProperty BorderThicknessProperty;
public static readonly DependencyProperty PaddingProperty;
public static readonly DependencyProperty CornerRadiusProperty;
[CommonDependencyProperty] public static readonly DependencyProperty BorderBrushProperty;
[CommonDependencyProperty] public static readonly DependencyProperty BackgroundProperty;
private bool _u