zoukankan      html  css  js  c++  java
  • WPF自定义控件制作:仪表之单针单数显

    1、

    2、

     代码中相关控件的使用可参考本园博文:WPF Dashboard仪表盘控件的实现

      1 <Style TargetType="{x:Type local:Gauge_OnlyPointe}">
      2         <Setter Property="Template">
      3             <Setter.Value>
      4                 <ControlTemplate TargetType="{x:Type local:Gauge_OnlyPointe}">
      5                     <Viewbox Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" d:DesignHeight="300" d:DesignWidth="300" MinWidth="170" MinHeight="170">
      6                         <Grid >
      7                             //圆形控件,用于指针运动轨迹
      8                             <Ellipse Margin="0" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="2" Fill="{TemplateBinding Background}"/>
      9                             //圆弧路径控件用于绑定长刻度:位置、起始、终止角度绑定到可设置的依赖属性
     10                             <ed:Arc x:Name="LongTickPath" Margin="{Binding LongTickMargin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" 
    ArcThicknessUnit
    ="Pixel" Stretch="None" Stroke="Black" StrokeThickness="0" Height="Auto" StartAngle="{TemplateBinding StartAngle}" EndAngle="{TemplateBinding EndAngle}" /> 11 //路径动画、数据集容器控件:数据源绑定到后台(LongTicksInternal),数据类型在后台定义 12 <ec:PathListBox x:Name="LongTick" IsHitTestVisible="False" ItemsSource="{TemplateBinding LongTicksInternal}">
    //长刻度数据集显示样式 13
    <ec:PathListBox.ItemTemplate> 14 //长刻度数据元样式:宽度、长度、颜色绑定到可设置的依赖属性 15 <DataTemplate> 16 <Border Width="{Binding LongTickWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    Height
    ="{Binding LongTickHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" SnapsToDevicePixels="True" UseLayoutRounding="False"
    Background
    ="{Binding LongTickColor, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" /> 17 </DataTemplate> 18 </ec:PathListBox.ItemTemplate> 19 //长刻度路径控件路径属性:在这里将圆弧绑定到了路径控件,并指定了排布方式和方向 20 <ec:PathListBox.LayoutPaths> 21 <ec:LayoutPath Distribution="Even" Orientation="OrientToPath" SourceElement="{Binding ElementName=LongTickPath}" /> 22 </ec:PathListBox.LayoutPaths> 23 </ec:PathListBox> 24 //圆弧路径控件用于绑定短刻度:位置、起始、终止角度绑定到可设置的依赖属性(其他处理同长刻度) 25 <ed:Arc x:Name="SmallTrianglePath" Margin="4" ArcThicknessUnit="Pixel" Stretch="None" Stroke="Black" StrokeThickness="0" Height="Auto"
    StartAngle
    ="{TemplateBinding StartAngle}" EndAngle="{TemplateBinding EndAngle}" /> 26 <ec:PathListBox x:Name="SmallTriangle" IsHitTestVisible="False" ItemsSource="{TemplateBinding LongTicksInternal}"> 27 <ec:PathListBox.ItemTemplate> 28 <DataTemplate> 29 <ed:RegularPolygon PointCount="3" Width="10" Height="6" Fill="#FF3BAABC" SnapsToDevicePixels="True" UseLayoutRounding="False" RenderTransformOrigin="0.5,0.5" > 30 <ed:RegularPolygon.RenderTransform> 31 <TransformGroup> 32 <ScaleTransform/> 33 <SkewTransform/> 34 <RotateTransform Angle="180"/> 35 <TranslateTransform/> 36 </TransformGroup> 37 </ed:RegularPolygon.RenderTransform> 38 </ed:RegularPolygon> 39 </DataTemplate> 40 </ec:PathListBox.ItemTemplate> 41 <ec:PathListBox.LayoutPaths> 42 <ec:LayoutPath Distribution="Even" Orientation="OrientToPath" SourceElement="{Binding ElementName=SmallTrianglePath}" /> 43 </ec:PathListBox.LayoutPaths> 44 </ec:PathListBox> 45 46 <ed:Arc x:Name="ShortTickPath" Margin="{Binding ShortTickMargin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    ArcThickness
    ="0" ArcThicknessUnit="Pixel" Stretch="None" Stroke="Black" StrokeThickness="0" 47 EndAngle="{TemplateBinding EndAngle}" StartAngle="{TemplateBinding StartAngle}" /> 48 49 <ec:PathListBox x:Name="ShortTick" IsHitTestVisible="False" ItemsSource="{TemplateBinding ShortTicksInternal}"> 50 <ec:PathListBox.ItemTemplate> 51 <DataTemplate> 52 <Border Width="{Binding ShortTickWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    Height
    ="{Binding ShortTickHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    Background
    ="{Binding ShortTickColor, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" SnapsToDevicePixels="True" UseLayoutRounding="False" /> 53 </DataTemplate> 54 </ec:PathListBox.ItemTemplate> 55 <ec:PathListBox.LayoutPaths> 56 <ec:LayoutPath Orientation="OrientToPath" SourceElement="{Binding ElementName=ShortTickPath}" Distribution="Even"/> 57 </ec:PathListBox.LayoutPaths> 58 </ec:PathListBox> 59 //圆弧路径控件用于绑定刻度数值:位置、起始、终止角度绑定到可设置的依赖属性(其他处理同长刻度) 60 <ed:Arc x:Name="NumberPath" Margin="{Binding NumberMargin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    ArcThickness
    ="0" ArcThicknessUnit="Pixel" Stretch="None" StartAngle="{TemplateBinding StartAngle}" EndAngle="{TemplateBinding EndAngle}" /> 61 <ec:PathListBox x:Name="Number" IsHitTestVisible="False" ItemsSource="{TemplateBinding NumberListInternal}"> 62 <ec:PathListBox.ItemTemplate> 63 <DataTemplate> 64 <TextBlock Text="{Binding Mode=OneWay}" FontSize="{Binding NumberFontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    Foreground
    ="{Binding NumberColor, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" /> 65 </DataTemplate> 66 </ec:PathListBox.ItemTemplate> 67 <ec:PathListBox.LayoutPaths> 68 <ec:LayoutPath Distribution="Even" Orientation="None" SourceElement="{Binding ElementName=NumberPath}" /> 69 </ec:PathListBox.LayoutPaths> 70 </ec:PathListBox> 71 //圆弧路径控件用于给进度条圆弧路径控件作为坐标基准 72 <ed:Arc x:Name="PART_IncreaseCircle" Margin="130" ArcThickness="10" ArcThicknessUnit="Pixel" 73 RenderTransformOrigin="0.5,0.5" Stretch="None" StrokeThickness="1" 74 StartAngle="{TemplateBinding StartAngle}" EndAngle="{TemplateBinding Angle}" Fill="#FFE8DADA"/> //路径控件用于绑定进度条角度变化动画 77 <Path x:Name="Finger" Stroke="{Binding FingerBar, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    StrokeThickness
    ="{Binding FingerThickness, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" RenderTransformOrigin="0.5,1"> 78 <Path.Data> 79 <LineGeometry StartPoint="{Binding FingerStartPoint, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    EndPoint
    ="{Binding FingerEndPoint, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"/> 80 </Path.Data> 81 <Path.RenderTransform> 82 <TransformGroup> 83 <ScaleTransform /> 84 <SkewTransform /> 85 <RotateTransform Angle="{Binding EndAngle, ElementName=PART_IncreaseCircle}" /> 86 <TranslateTransform Y="-130.5" X="0" /> 87 </TransformGroup> 88 </Path.RenderTransform> 89 </Path> 90 //圆弧路径控件用于绑定进度条 91 <ed:Arc x:Name="PART_Process" ArcThickness="{Binding ProcessThickness, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    ArcThicknessUnit
    ="Pixel" Margin="{Binding ProcessMargin , RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" 92 RenderTransformOrigin="0.5,0.5" Stretch="None" 93 StartAngle="{TemplateBinding StartAngle}" EndAngle="{TemplateBinding Angle}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
    Fill
    ="{Binding ProcessBar, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" /> 94 95 <Border Background="{TemplateBinding LogoPicture}" Height="{Binding LogoHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    Width
    ="{Binding LogoWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" HorizontalAlignment="Center" VerticalAlignment="Center"
    Margin
    ="{Binding LogoMargin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"/> 96 <TextBlock Text="{TemplateBinding TextUnit}" Foreground="{TemplateBinding TextBar}" HorizontalAlignment="Center" VerticalAlignment="Center"
    FontSize
    ="{Binding TextFontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    Margin
    ="{Binding TextMargin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"/> 97 <TextBlock Text="{Binding TextLogo, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    Foreground
    ="{Binding TextLogoPicture, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    FontSize
    ="{Binding TextFontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}" HorizontalAlignment="Center"
    VerticalAlignment
    ="Center" Margin="{Binding TextLogoMargin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"/> 98 <TextBlock x:Name="textValue" Text="{TemplateBinding StringValue}" Foreground="{Binding StringValueColor, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    HorizontalAlignment
    ="Center" VerticalAlignment="Center" FontSize="{Binding StringValueFontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"
    Margin
    ="{Binding StringValueMargin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Gauge_OnlyPointe}}}"/> 99 100 </Grid> 101 </Viewbox> 102 103 <ControlTemplate.Triggers> 104 <DataTrigger> 105 <DataTrigger.Binding> 106 <MultiBinding Converter="{StaticResource VTC}"> 107 <Binding Path="StartAngle" RelativeSource="{x:Static RelativeSource.Self}"/> 108 <Binding Path="EndAngle" RelativeSource="{x:Static RelativeSource.Self}"/> 109 <Binding Path="Angle" RelativeSource="{x:Static RelativeSource.Self}"/> 110 </MultiBinding> 111 </DataTrigger.Binding> 112 <DataTrigger.Value>true</DataTrigger.Value> 113 <DataTrigger.Setters> 116 </DataTrigger.Setters> 117 </DataTrigger> 118 </ControlTemplate.Triggers> 119 </ControlTemplate> 120 </Setter.Value> 121 </Setter> 122 </Style>
  • 相关阅读:
    XML和JSON优缺点
    JSON与XML优缺点对比分析
    json数据格式
    ajax 请求二进制流 图片
    常用网站
    Js setTimeout 用法
    js Indexof的用法
    02_虚拟机的安装和SecureCRT、FileZilla、Xmanage、UltraEdit工具的介绍
    01_Hadoop学习笔记内容说明
    sudoers文件设置sudo命令无密码(root密码)登录
  • 原文地址:https://www.cnblogs.com/crcce-dncs/p/12951265.html
Copyright © 2011-2022 走看看