首页 > 其他分享 >WPF RingShape

WPF RingShape

时间:2024-05-28 20:58:10浏览次数:20  
标签:RingShape Windows double System new using WPF rect

//cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp116
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        } 
    }

    public class RingShape : Shape
    {
        Rect _rect;

        static RingShape()
        {
            StretchProperty.OverrideMetadata(typeof(RingShape),
                new FrameworkPropertyMetadata(Stretch.Uniform,
                FrameworkPropertyMetadataOptions.AffectsMeasure |
                FrameworkPropertyMetadataOptions.AffectsRender));
        }


        public double RingWidth
        {
            get { return (double)GetValue(RingWidthProperty); }
            set { SetValue(RingWidthProperty, value); }
        }

        // Using a DependencyProperty as the backing store for RingWidth.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty RingWidthProperty =
            DependencyProperty.Register("RingWidth", typeof(double), typeof(RingShape),
                new FrameworkPropertyMetadata(0.1, FrameworkPropertyMetadataOptions.AffectsRender));

        protected override Geometry DefiningGeometry
        {
            get
            {
                if (_rect.IsEmpty)
                {
                    return Geometry.Empty;
                }
                var rc = _rect;
                rc.Inflate(-RingWidth * _rect.Width, -RingWidth * _rect.Height);
                return new CombinedGeometry(GeometryCombineMode.Exclude,
                    new EllipseGeometry(_rect), new EllipseGeometry(rc));
                
            }
        }

        protected override Size MeasureOverride(Size constraint)
        {
            if (double.IsInfinity(constraint.Width) || double.IsInfinity(constraint.Height))
            {
                _rect = Rect.Empty;
                return Size.Empty;
            }

            double size;
            switch (Stretch)
            {
                case Stretch.Fill:
                    _rect = new Rect(constraint);
                    break;
                case Stretch.Uniform:
                    size = Math.Min(constraint.Width, constraint.Height);
                    _rect = new Rect(new Size(size, size));
                    break;
                case Stretch.UniformToFill:
                    size = Math.Max(constraint.Width, constraint.Height);
                    _rect = new Rect(new Size(size, size));
                    break;
                case Stretch.None:
                    _rect = double.IsNaN(Width) || double.IsNaN(Height) ? Rect.Empty : new Rect(new Size(Width, Height));
                    break;
            }
            
            return _rect.Size;
        }
    }
}


//xaml
<Window x:Class="WpfApp116.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp116"
        mc:Ignorable="d"  WindowState="Maximized"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <local:RingShape Fill="Red" Stroke="Black" StrokeThickness="4" RingWidth="0.15"/>
    </Grid>
</Window>

 

标签:RingShape,Windows,double,System,new,using,WPF,rect
From: https://www.cnblogs.com/Fred1987/p/18218818

相关文章

  • WPF XAML中特殊字符的转义代码
    字符转义字符&&amp;>&gt;<&lt;"&quot;’&apos;{{}{回车&#x000D;或者&#13;换行&#x000A;或者&#10;Tab&#x0009;或者&#9;空格&#x0020;或者&#32;......
  • 记一次 .NET某工控WPF程序被人恶搞的 卡死分析
    一:背景1.讲故事这一期程序故障除了做原理分析,还顺带吐槽一下,熟悉我的朋友都知道我分析dump是免费的,但免费不代表可以滥用我的宝贵时间,我不知道有些人故意恶搞卡死是想干嘛,不得而知,希望后面类似的事情越来越少吧!废话不多说,我们来看看是如何被恶搞的。二:WinDbg分析1.程序是如......
  • WPF Splash Screen – A New Splash Screen Manager (v20.1) 启动页 闪屏页 初始加载
    WPFSplashScreen–ANewSplashScreenManager(v20.1)(devexpress.com)  WPFTeamBlog RSS06July2020A splashscreen isaneffectivewaytoimproveanapp’suserexperienceduringlengthystartupoperations.Unfortunately,creatinganef......
  • WPF 中具有静态属性的数据绑定
    我有一个简单的静态属性FontSizeTitle,它应该用于所有HandledWindow类型实例中的风格化标题,并在更改属性后同时从同一个静态属性更新而无需明确通知。通过设置面板或任何会更改属性的内容,以便直观地更改和更新所有窗口的所有标题的字体大小。这是我在XAML中风格化标题的代码,它......
  • WPF_全局静态变量并且实现变更通知
    WPF_全局静态变量并且实现变更通知当我是开发WPF时可能会出现一个数据在多个页面使用的情况或者获取的数据在工具类里面需要更新到界面上,这时候就可以使用全局静态变量来实现界面的更新.第一步:编写全局静态变量并创建变更通知usingSystem;usingSystem.Collections.Generic;us......
  • WPF开发01-数据绑定的几种方式,静态,动态、向上查找、适应各种情况
    1.前后端简单绑定第一种比较常见,常见于mvvm框架前端<TextBlockText="{BindingPath=Name}"></TextBlock>1后端publicclassPersonViewModel:INotifyPropertyChanged{publicstringName{get{returnname;}set{if(name......
  • Wpf经验技巧-使用 d:DataContext 指定 DataContext 的类型.
    VM代码:V代码(版本1):没有指定DataContext的类型,所以下面的绑定并不知道P1和P3到底是什么,也就无法在代码编辑时检测出绑定是否正确.如果写错了,只能等到程序运行并打开这个窗口时报错才能知道.V代码(版本2):通过d:DataContext指定了DataContext的类型,所以下面的绑定可以知道......
  • 一步一步实现WPF透明化窗口
    这一篇教程讲述如何实现透明窗体和透明控件,在WindowStyle设置为none情况下拖拽窗口,半透明作为较容易实现的一种美观化,对于大多数美工较弱的开发者来说实用性不错,能在一些平面化设计场合发挥简单而有效的美化效果。  实现效果1:窗体整体半透明   实现效果2:窗体全透明......
  • WPF设置Button的Style
    扣扣技术交流群:460189483一、前言程序界面上的按钮多种多样,常用的就这几种:普通按钮、图标按钮、文字按钮、图片文字混合按钮。本文章记录了不同样式类型的按钮实现方法。下面话不多说了,来一起看看详细的介绍吧。二、固定样式的按钮固定样式的按钮一般在临时使用时或程序的样式......
  • WPF在ListView中绑定Command命令的写法
    假定:ViewModel中有一个数据源叫Persons,有一个命令叫DoCommand,通过System.Windows.Interactivity触发器绑定鼠标MouseUp事件,当UI端绑定了DataContext数据上下文之后,Command="{BindingDoCommand}"是找不到这个命令的,必须使用Binging类的RelativeSource属性先找到当前UI,再找到DataC......