WpfApp1/CircularMenu.cs

(开头部分) 5KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

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

namespace WpfApp1
{
    [TemplatePart(Name = "PART_Rim", Type = typeof(Path))]
    public class CircularMenuItem: HeaderedItemsControl
    {
        static CircularMenuItem()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(CircularMenuItem), new FrameworkPropertyMetadata(typeof(CircularMenuItem)));
        }

        public double ArcWidth
        {
            get { return (double)GetValue(ArcWidthProperty); }
            set { SetValue(ArcWidthProperty, value); }
        }

        // Using a DependencyProperty as the backing store for ArcWidth.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty ArcWidthProperty =
            DependencyProperty.Register("ArcWidth", typeof(double), typeof(CircularMenuItem), new PropertyMetadata(0d));


        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            this._contentOutBorder = GetTemplateChild("PART_ContentOutBorder") as Border;
            this._contentInBorder = GetTemplateChild("PART_ContentInBorder") as Border;
            this._partRim = GetTemplateChild("PART_Rim") as Path;
            _parentControl = ItemsControlFromItemContainer(this);
            _index =  _parentControl.Items.IndexOf(this);
            _count = _parentControl.Items.Count;
            if(this._partRim != null)
            {
                double r = Math.Min(this._parentControl.ActualHeight, this._parentControl.ActualWidth) / 2;
                Paint(r - _overflow - iWidth, r - _overflow, 6, _overflow, true);
            }
        }

        int _index = 0;
        int _count = 0;
        double _overflow = 10d;
        ItemsControl _parentControl = null;
        Path _partRim = null;
        Border _contentOutBorder = null;
        Border _contentInBorder = null;
        double iWidth = 50;

        void Paint(double inRadius, double outRadius, int count, double overflow, bool AutoRotate)
        {
            double iDiameter = inRadius * 2;
            double oDiameter = outRadius * 2;
            Vector iPoint = new Vector(iWidth, iWidth);

            double transformY = (outRadius - inRadius) / 2 + inRadius; //内容在Y轴偏移量
后面还有 63 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。