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
  • 相关阅读:
    c#自动更新+安装程序的制作
    VS2013项目受源代码管理向源代码管理注册此项目时出错
    WinDbg配置和使用基础
    InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)
    PowerDesigner 如何生成数据库更新脚本
    用户故事(User Story)
    Troubleshooting Record and Playback issues in Coded UI Test
    Coded UI
    compare two oracle database schemas
    How to: Use Schema Compare to Compare Different Database Definitions
  • 原文地址:https://www.cnblogs.com/simadi/p/15292360.html
Copyright © 2011-2022 走看看