小工具知识网

当前位置: 首页 > 行业知识 > WPF中如何设置自定义控件(三)

行业知识

WPF中如何设置自定义控件(三)

2026-11-08 20:49:09 来源:互联网转载

���定义背景:前面讲过自定义圆角按钮和圆形按钮,这节主要将自定义背景色。

在以往的设置中我们的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

上一篇:拓途数据下载指南,轻松获取数据,攻略全掌握!

下一篇:魔兽服务器排名怎么看?