zoukankan      html  css  js  c++  java
  • c# wpf 条状刻度线,仪表盘的做法

    网上看到 https://www.cnblogs.com/congqiandehoulai/p/12733245.html 

    照着例子做,一直不行,最后发现了问题。

    1 需要添加两个引用

    Microsoft.Expression.Controls
    Microsoft.Expression.Drawing

    这两个dll需要引用到项目里,可以在自己的电脑里查到

    2 在MainWindow里引入命名空间

            xmlns:ec="http://schemas.microsoft.com/expression/2010/controls"
            xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"

    3 需要定义两个动态资源

        <Window.Resources>
            <RadialGradientBrush x:Key="heading_tickmark_color">
                <GradientStop Color="White" />
            </RadialGradientBrush>
            <RadialGradientBrush x:Key="heading_pointer_color">
                <GradientStop Color="DodgerBlue" />
            </RadialGradientBrush>
        </Window.Resources>

     然后运行效果就出来了!

    详细源码

    1 xml

    <Window x:Class="WpfApp1.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:WpfApp1"
            xmlns:ec="http://schemas.microsoft.com/expression/2010/controls"
            xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <Window.Resources>
            <RadialGradientBrush x:Key="heading_tickmark_color">
                <GradientStop Color="White" />
            </RadialGradientBrush>
            <RadialGradientBrush x:Key="heading_pointer_color">
                <GradientStop Color="DodgerBlue" />
            </RadialGradientBrush>
        </Window.Resources>
        <Grid x:Name="myGrid" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Viewbox Stretch="Uniform">
                <Grid  Width="500" Height="162.26">
                    <!--按半径为500 角度为60度的圆弧计算-->
                    <Grid Width="1000" Margin="-250,0,0,0" Height="1000" Background="Black"  >
                        <Grid.Clip>
                            <PathGeometry>
                                <PathFigure StartPoint="250 67">
                                    <ArcSegment Point="750 67"  Size="500 500"  SweepDirection="Clockwise"/>
                                    <LineSegment Point="695 162.26" />
                                    <ArcSegment Point="305 162.26" Size="390 390"  SweepDirection="Counterclockwise"/>
                                </PathFigure>
                            </PathGeometry>
                        </Grid.Clip>
                        <!--指针-->
                        <Path HorizontalAlignment="Center" Margin="  0 10 0 0" Data="M0 100 A20 20 0 0 1 10 82.68 L 20 0 L 30 82.68 A20 20 0 0 1 40 100 A20 20 0 0 0 0 100" Stroke="Red" StrokeThickness="2" Fill="Red"/>
                        <Grid Width="1000" Height="1000" HorizontalAlignment="Center" VerticalAlignment="Top"  RenderTransformOrigin="0.5,0.5">
                            <Grid.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform />
                                    <SkewTransform />
                                    <RotateTransform x:Name="rootGridRotate"  />
                                    <TranslateTransform />
                                </TransformGroup>
                            </Grid.RenderTransform>
                            <!--短刻度线-->
                            <ec:PathListBox  x:Name="lbshort"
                                                            IsHitTestVisible="False"
                                                            >
                                <ec:PathListBox.ItemTemplate>
                                    <DataTemplate>
                                        <Rectangle Width="2" Height="23" Fill="{DynamicResource heading_tickmark_color}"/>
                                    </DataTemplate>
                                </ec:PathListBox.ItemTemplate>
                                <ec:PathListBox.LayoutPaths>
                                    <ec:LayoutPath Distribution="Even"
                                                                   Orientation="OrientToPath"
                                                                   SourceElement="{Binding ElementName=shortArc}" />
                                </ec:PathListBox.LayoutPaths>
                            </ec:PathListBox>
                            <ed:Arc x:Name="shortArc"
                                                    Width="970"
                                                    Height="970"
                                                    HorizontalAlignment="Center"
                                                    VerticalAlignment="Center"
                                                    ArcThicknessUnit="Pixel"
                                                    EndAngle="360"
                                                    StartAngle="0"
                                                    Stretch="None"/>
    
    
    
                            <!--中刻度线-->
                            <ec:PathListBox x:Name="lbmedium"
                                                            IsHitTestVisible="False"
                                                           >
                                <ec:PathListBox.ItemTemplate>
                                    <DataTemplate>
                                        <Rectangle Width="2" Height="32" Fill="{DynamicResource heading_tickmark_color}"/>
                                    </DataTemplate>
                                </ec:PathListBox.ItemTemplate>
                                <ec:PathListBox.LayoutPaths>
                                    <ec:LayoutPath Distribution="Even"
                                                                   Orientation="OrientToPath"
                                                                   SourceElement="{Binding ElementName=mediumArc}" />
                                </ec:PathListBox.LayoutPaths>
                            </ec:PathListBox>
                            <ed:Arc x:Name="mediumArc"
                                                    Width="950"
                                                    Height="950"
                                                    HorizontalAlignment="Center"
                                                    VerticalAlignment="Center"
                                                    ArcThicknessUnit="Pixel"
                                                    EndAngle="360"
                                                    StartAngle="0"
                                                    Stretch="None" />
    
                            <!--长刻度线-->
                            <ec:PathListBox x:Name="lblong"
                                                            IsHitTestVisible="False"
                                                            >
                                <ec:PathListBox.ItemTemplate>
                                    <DataTemplate>
                                        <Rectangle Width="2" Height="56" Fill="{DynamicResource heading_tickmark_color}"/>
                                    </DataTemplate>
                                </ec:PathListBox.ItemTemplate>
                                <ec:PathListBox.LayoutPaths>
                                    <ec:LayoutPath Distribution="Even"
                                                                   Orientation="OrientToPath"
                                                                   SourceElement="{Binding ElementName=longArc}" />
                                </ec:PathListBox.LayoutPaths>
                            </ec:PathListBox>
    
                            <ed:Arc x:Name="longArc"
                                                    Width="930"
                                                    Height="930"
                                                    HorizontalAlignment="Center"
                                                    VerticalAlignment="Center"
                                                    ArcThicknessUnit="Pixel"
                                                    EndAngle="360"
                                                    StartAngle="0"
                                                    Stretch="None"
                                                    Visibility="Hidden" />
                            <!--数字-->
                            <ec:PathListBox  x:Name="lbtext"
                                                            IsHitTestVisible="False"
                                                            >
                                <ec:PathListBox.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock  Text="{Binding}" Foreground="{DynamicResource heading_tickmark_color}"/>
                                    </DataTemplate>
                                </ec:PathListBox.ItemTemplate>
                                <ec:PathListBox.LayoutPaths>
                                    <ec:LayoutPath Distribution="Even"
                                                                   Orientation="OrientToPath"
                                                                   SourceElement="{Binding ElementName=textArc}" />
                                </ec:PathListBox.LayoutPaths>
                            </ec:PathListBox>
                            <ed:Arc x:Name="textArc"
                                                    Width="860"
                                                    Height="860"
                                                    HorizontalAlignment="Center"
                                                    VerticalAlignment="Center"
                                                    ArcThicknessUnit="Pixel"
                                                    EndAngle="360"
                                                    StartAngle="0"
                                                    Stretch="None" Stroke="Red" StrokeThickness="3" />
    
                        </Grid>
    
                    </Grid>
                    <!--绘制边框-->
                    <Path  Stretch="Fill" Stroke="{DynamicResource heading_pointer_color}" StrokeThickness="4">
                        <Path.Data>
                            <PathGeometry>
                                <PathFigure IsClosed="True" StartPoint="0 67">
                                    <ArcSegment Point="500 67" Size="500 500"  SweepDirection="Clockwise"/>
                                    <LineSegment Point="445 162.26" />
                                    <ArcSegment Point="55 162.26" Size="390 390"  SweepDirection="Counterclockwise"/>
                                </PathFigure>
                            </PathGeometry>
                        </Path.Data>
                    </Path>
                </Grid>
            </Viewbox>
            <RepeatButton Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
        </Grid>
    </Window>
    View Code

    2 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 WpfApp1
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            private List<int> ShortTicks;
            private List<int> MiddleTicks;
            private List<int> LongTicks;
            private List<string> TextLists;
            public MainWindow()
            {
                InitializeComponent();
                this.ShortTicks = new List<int>();
                this.MiddleTicks = new List<int>();
                this.LongTicks = new List<int>();
                this.TextLists = new List<string>();
                for (int i = 0; i < 360; i++)
                {
                    ShortTicks.Add(i);
                }
    
                for (int i = 0; i < 72; i++)
                {
    
                    MiddleTicks.Add(i);
                }
    
                for (int i = 0; i < 36; i++)
                {
    
                    LongTicks.Add(i);
                }
                for (int i = 0; i < 36; i++)
                {
                    TextLists.Add((i * 10).ToString());
                }
                lblong.ItemsSource = LongTicks;
                lbmedium.ItemsSource = MiddleTicks;
                lbshort.ItemsSource = ShortTicks;
                lbtext.ItemsSource = TextLists;
            }
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                rootGridRotate.Angle += 10;
            }
        }
    }
    View Code
  • 相关阅读:
    今天刚开通博客,很开心
    ZYNQ双核AMP开发详解(USE_AMP -DUSE_AMP=1 含义和作用详解)
    赛灵思机器学习套件(ML Suite) v1.4 DPU, DNNK
    petalinux add pre-build application to rootfs compile faliure solution
    如何用SDK生成device tree
    Zynq UltraScale+ MPSoC device tree 中 CCF中 clock output数字映射表
    Zynq ZC702平台 QSPI + eMMC实现
    Zynq ZC702平台 Linux + Baremetal AMP实现(一)【快速启动CPU1】
    第五章 任务执行
    第四章 闭锁
  • 原文地址:https://www.cnblogs.com/simadi/p/15292360.html
Copyright © 2011-2022 走看看