仓库包含Icon图标,Brush统一画刷,统一Font字体,自定义控件以及多种控件样式。

Jiangsheng 467cc77330 1.新增NumpadControl数字小键盘,方便输入。 4 tygodni temu
SKMC.UI 467cc77330 1.新增NumpadControl数字小键盘,方便输入。 4 tygodni temu
.gitattributes 95bec8f8cc 添加 .gitattributes 和 .gitignore。 1 miesiąc temu
.gitignore 95bec8f8cc 添加 .gitattributes 和 .gitignore。 1 miesiąc temu
Readme.md 467cc77330 1.新增NumpadControl数字小键盘,方便输入。 4 tygodni temu
SKMC.UI.sln 91c275594c 添加项目文件。 1 miesiąc temu

Readme.md

基础UI库(SKMC.UI)

统一资源,统一样式,统一字体,自定义控件,自定义用户控件。

基础说明

主要分类:Assets资源文件、Converters基础转换器、CustomControls自定义控件、Styles控件样式、Themes主题、ValidationRules校验规则资源。

Colors.xaml

颜色资源文件,使用16进制颜色标签,作为后续画刷基础颜色,项目中可根据需求更改

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--基础颜色/公共颜色-->
    <Color x:Key="Color.Neutral">#545454</Color>
    <Color x:Key="Color.Error">#FF191C</Color>
    <Color x:Key="Color.Warning">#FCB000</Color>
    <Color x:Key="Color.Good">#00F976</Color>
    <Color x:Key="Color.RgbGreen">#00FF00</Color>
    <Color x:Key="Color.DebugLog">#5ADAE2</Color>
    <Color x:Key="Color.Blue">#0000FF</Color>
    <Color x:Key="Color.DrawCross">Green</Color>
    <Color x:Key="Color.Ruler">Red</Color>
    <Color x:Key="Color.ZoomWindow">Yellow</Color>
    <Color x:Key="Color.Start">#009647</Color>
    <Color x:Key="Color.Stop">#CD1315</Color>
    <Color x:Key="Color.Pause">#FCB000</Color>
    <Color x:Key="Color.HomePosition">#0091FF</Color>
    <Color x:Key="Color.LockDoors">#FCB000</Color>
    <Color x:Key="Color.RgbBlue">#363BFF</Color>
    <Color x:Key="Color.ViewPort.Element">Green</Color>
    <Color x:Key="Color.ViewPort.SecondaryElement">LightGreen</Color>
    <Color x:Key="Color.ViewPort.SelectedElement">Blue</Color>
    <Color x:Key="Color.ViewPort.NotValid">Red</Color>
    <Color x:Key="Color.ViewPort.Origin">Cyan</Color>
    <Color x:Key="Color.ViewPort.ScanFieldOutline">LightBlue</Color>
    <Color x:Key="Color.ViewPort.SelectedContour">LightBlue</Color>
    <Color x:Key="Color.ViewPort.MaterialOutline">Gray</Color>
    <Color x:Key="Color.ViewPort.LaneOutline">Olive</Color>
    <Color x:Key="Color.ViewPort.Scanfield">White</Color>
    <Color x:Key="Color.ViewPort.OriginMarker">Green</Color>
    <Color x:Key="Color.ViewPort.Padding">Orange</Color>
    <Color x:Key="Color.ViewPort.HardwareLimitOutline">LightGray</Color>
    <Color x:Key="Color.ViewPort.Grid">#50A0A0A0</Color>
    <Color x:Key="Color.ViewPort.Layer0">Black</Color>
    <Color x:Key="Color.ViewPort.Layer1">Green</Color>
    <Color x:Key="Color.ViewPort.Layer2">Orange</Color>
    <Color x:Key="Color.ViewPort.Layer3">Fuchsia</Color>
</ResourceDictionary>

Brushes.xaml

通用基础画刷,该资源作为全局通用画刷,不随主题切换变更,在XAML使用时需要注意目标控件是否需要跟随主题切换变更。SolidColorBrush固定画刷引用Colors.xaml资源内设定的Color

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--公共画刷,不随主题切换-->
    <SolidColorBrush x:Key="Brush.MachineControls" Color="{DynamicResource Color.MachineControls}" />
    <SolidColorBrush x:Key="Brush.Overlay2Percent" Opacity="0.02" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay3Percent" Opacity="0.03" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay5Percent" Opacity="0.05" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay6Percent" Opacity="0.06" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay7Percent" Opacity="0.07" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay8Percent" Opacity="0.08" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay12Percent" Opacity="0.12" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay17Percent" Opacity="0.17" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay24Percent" Opacity="0.24" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.Overlay48Percent" Opacity="0.5" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.DarkOverlay12Percent" Opacity="0.12" Color="{DynamicResource Color.DarkOverlay}" />
    <SolidColorBrush x:Key="Brush.DarkOverlay80Percent" Opacity="0.8" Color="{DynamicResource Color.DarkOverlay}" />
    <SolidColorBrush x:Key="Brush.DarkOverlay50Percent" Opacity="0.5" Color="{DynamicResource Color.DarkOverlay}" />

    <SolidColorBrush x:Key="Brush.SecondaryButton" Opacity="0.12" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.SecondaryButtonMouseOver" Opacity="0.24" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.SecondaryButtonPressed" Opacity="0.08" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.SecondaryButtonDisabled" Opacity="0.03" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.TertiaryButton" Color="Transparent" />
    <SolidColorBrush x:Key="Brush.TertiaryButtonMouseOver" Opacity="0.24" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.TertiaryButtonPressed" Opacity="0.08" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.TertiaryButtonDisabled" Color="Transparent" />
    <SolidColorBrush x:Key="Brush.TertiaryButtonBorder" Opacity="0.48" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.TertiaryButtonPressedBorder" Opacity="0.16" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.TertiaryButtonDisabledBorder" Opacity="0.03" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.SelectedBorder" Color="{DynamicResource Color.SelectedBorder}" />
    <SolidColorBrush x:Key="Brush.NotSelectedBorder" Color="{DynamicResource Color.Border}" />
    <SolidColorBrush x:Key="Brush.SelectionDisabledBackground" Color="{DynamicResource Color.SelectionDisabledBackground}" />
    <SolidColorBrush x:Key="Brush.SelectionInactiveBorder" Opacity="0.38" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.SelectionSelected" Color="{DynamicResource Color.Signature}" />
    <SolidColorBrush x:Key="Brush.SelectionSelectedBackground" Opacity="0.5" Color="{DynamicResource Color.Signature}" />

    <SolidColorBrush x:Key="Brush.Label" Color="{DynamicResource Color.Label}" />
    <SolidColorBrush x:Key="Brush.SecondaryFont" Opacity="0.6" Color="{DynamicResource Color.Text}" />
    <SolidColorBrush x:Key="Brush.Annotation" Color="DarkViolet" />
    <SolidColorBrush x:Key="Brush.TextSecondColor" Color="Yellow" />
    <SolidColorBrush x:Key="Brush.DebugText" Color="White" />
    <SolidColorBrush x:Key="Brush.DebugTextOver" Opacity="0.5" Color="White" />
    
    <SolidColorBrush x:Key="Brush.RgbRed" Color="{DynamicResource Color.Error}" />
    <SolidColorBrush x:Key="Brush.RgbGreen" Color="{DynamicResource Color.RgbGreen}" />
    <SolidColorBrush x:Key="Brush.RgbBlue" Color="{DynamicResource Color.RgbBlue}" />
    <SolidColorBrush x:Key="Brush.Neutral" Color="{DynamicResource Color.Neutral}" />
    <SolidColorBrush x:Key="Brush.Error" Color="{DynamicResource Color.Error}" />
    <SolidColorBrush x:Key="Brush.ErrorLowOpacity" Opacity="0.1" Color="{DynamicResource Color.Error}" />
    <SolidColorBrush x:Key="Brush.Warning" Color="{DynamicResource Color.Warning}" />
    <SolidColorBrush x:Key="Brush.WarningLowOpacity" Opacity="0.1" Color="{DynamicResource Color.Warning}" />
    <SolidColorBrush x:Key="Brush.Good" Color="{DynamicResource Color.Good}" />
    <SolidColorBrush x:Key="Brush.GoodLowOpacity" Opacity="0.1" Color="{DynamicResource Color.Good}" />
    <SolidColorBrush x:Key="Brush.DebugLog" Color="{DynamicResource Color.DebugLog}" />
    <SolidColorBrush x:Key="Brush.Start" Color="{DynamicResource Color.Start}" />
    <SolidColorBrush x:Key="Brush.Stop" Color="{DynamicResource Color.Stop}" />
    <SolidColorBrush x:Key="Brush.Pause" Color="{DynamicResource Color.Pause}" />
    <SolidColorBrush x:Key="Brush.HomePosition" Color="{DynamicResource Color.HomePosition}" />
    <SolidColorBrush x:Key="Brush.LockDoors" Color="{DynamicResource Color.LockDoors}" />
    <SolidColorBrush x:Key="Brush.Ellipse" Color="LimeGreen" />
    <SolidColorBrush x:Key="Brush.StripeFirstEdge" Color="LimeGreen" />
    <SolidColorBrush x:Key="Brush.StripeSecondFirstEdge" Color="LimeGreen" />
    <SolidColorBrush x:Key="Brush.StripeMiddleLine" Color="Red" />
    <SolidColorBrush x:Key="Brush.Contour" Color="Blue" />
    <SolidColorBrush x:Key="Brush.SecondContour" Color="Orange" />
    <SolidColorBrush x:Key="Brush.CrossMarker" Color="Blue" />
    <SolidColorBrush x:Key="Brush.ChartLine.0" Color="Violet" />
    <SolidColorBrush x:Key="Brush.ChartLine.1" Color="White" />
    <SolidColorBrush x:Key="Brush.ChartLine.2" Color="LimeGreen" />
    <SolidColorBrush x:Key="Brush.ChartLine.3" Color="Yellow" />
    <SolidColorBrush x:Key="Brush.ChartLine.4" Color="Red" />
    <SolidColorBrush x:Key="Brush.ChartLine.5" Color="LightBlue" />
    <SolidColorBrush x:Key="Brush.ChartLine.6" Color="Orange" />
    <SolidColorBrush x:Key="Brush.ChartLine.7" Color="Pink" />
    <SolidColorBrush x:Key="Brush.ChartLine.8" Color="LightGray" />
    <SolidColorBrush x:Key="Brush.ChartLine.9" Color="LightYellow" />
</ResourceDictionary>

Dark.xaml

深色主题资源文件对项目中部分/主要控件颜色设立动态颜色切换,比如:整体背景色、字体颜色、按钮颜色等。只区分主要颜色,其它颜色使用Brushes.xaml不跟随主题变更显示

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--深色主题-->
    <Color x:Key="Color.Background">#1E1E1E</Color>
    <Color x:Key="Color.DarkBackground">#161616</Color>
    <Color x:Key="Color.MachineControls">#121212</Color>
    <Color x:Key="Color.Overlay">#FCF3EC</Color>
    <Color x:Key="Color.DarkOverlay">#000000</Color>
    <Color x:Key="Color.HeaderAlternative">#2D2D2D</Color>
    <Color x:Key="Color.BodyAlternative">#3C3C3C</Color>
    <Color x:Key="Color.Button">#FFFFFF</Color>
    <Color x:Key="Color.Text">#FFFFFF</Color>
    <Color x:Key="Color.TextContrast">#292929</Color>
    <Color x:Key="Color.TextInactive">#9C9C9C</Color>
    <Color x:Key="Color.PreviewBackground">#444</Color>
    <Color x:Key="Color.Label">#848484</Color>
    <Color x:Key="Color.Icon">#FFFFFF</Color>
    <Color x:Key="Color.IconInactive">#9C9C9C</Color>
    <Color x:Key="Color.Border">#808080</Color>
    <Color x:Key="Color.DashboardBackground">#3a3a3a</Color>
    <Color x:Key="Color.SelectedBorder">#FFFFFF</Color>
    <Color x:Key="Color.SelectionDisabledBackground">#333333</Color>

    <SolidColorBrush x:Key="Brush.Background" Color="{DynamicResource Color.Background}" />
    <SolidColorBrush x:Key="Brush.DarkBackground" Color="{DynamicResource Color.DarkBackground}" />
    <SolidColorBrush x:Key="Brush.PreviewBackground" Color="{DynamicResource Color.PreviewBackground}" />

    <SolidColorBrush x:Key="Brush.Button" Color="{DynamicResource Color.Button}" />
    <SolidColorBrush x:Key="Brush.ButtonPressed" Opacity="0.08" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.ButtonTextInactive" Opacity="0.38" Color="{DynamicResource Color.Text}" />
    <SolidColorBrush x:Key="Brush.ButtonTextDisabled" Opacity="0.30" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.ButtonHover" Opacity="0.2" Color="{DynamicResource Color.Signature}" />

    <SolidColorBrush x:Key="Brush.PrimaryButton" Opacity="0.5" Color="{DynamicResource Color.Signature}" />
    <SolidColorBrush x:Key="Brush.PrimaryButtonMouseOver" Opacity="0.24" Color="{DynamicResource Color.Signature}" />
    <SolidColorBrush x:Key="Brush.PrimaryButtonPressed" Color="{DynamicResource Color.SignatureDark}" />
    <SolidColorBrush x:Key="Brush.PrimaryButtonDisabled" Opacity="0.5" Color="{DynamicResource Color.SignatureDark}" />

    <SolidColorBrush x:Key="Brush.Text" Color="{DynamicResource Color.Text}" />
    <SolidColorBrush x:Key="Brush.TextContrast" Color="{DynamicResource Color.TextContrast}" />
    <SolidColorBrush x:Key="Brush.TextInactive" Color="{DynamicResource Color.TextInactive}" />

    <SolidColorBrush x:Key="Brush.Icon" Color="{DynamicResource Color.Icon}" />
    <SolidColorBrush x:Key="Brush.IconInactive" Color="{DynamicResource Color.IconInactive}" />
    <SolidColorBrush x:Key="Brush.Border" Color="{DynamicResource Color.Border}" />

    <SolidColorBrush x:Key="Brush.DashboardBackground" Color="{DynamicResource Color.DashboardBackground}" />
    <SolidColorBrush x:Key="Brush.HeaderAlternative" Color="{DynamicResource Color.HeaderAlternative}"/>
    <SolidColorBrush x:Key="Brush.BodyAlternative" Color="{DynamicResource Color.BodyAlternative}"/>
    
    <Color x:Key="Color.Signature">#00AFAF</Color>
    <Color x:Key="Color.SignatureLight">#CCEAEC</Color>
    <Color x:Key="Color.SignatureDark">#006D75</Color>
    <Color x:Key="Color.SignatureAccent">#00929D</Color>
    <SolidColorBrush x:Key="Brush.Signature" Color="{DynamicResource Color.Signature}" />
    <SolidColorBrush x:Key="Brush.SignatureLight" Color="{DynamicResource Color.SignatureLight}" />
    <SolidColorBrush x:Key="Brush.SignatureDark" Color="{DynamicResource Color.SignatureDark}" />
    <SolidColorBrush x:Key="Brush.SignatureAccent" Color="{DynamicResource Color.SignatureAccent}" />

</ResourceDictionary>

Light.xaml

浅色主题同上,深色主题与浅色主题切换时,需要保证两者画刷资源key相同且数量相同,切换主题本质上切换Dark.xamlLight.xaml资源,若同一个画刷只存在其中一个主题文件中,在切换是会找不到对应key资源。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!-- 浅色主题 -->
    <Color x:Key="Color.Background">#FFFFFF</Color>
    <Color x:Key="Color.DarkBackground">#E8F1FA</Color>
    <Color x:Key="Color.MachineControls">#DCDCDC</Color>
    <Color x:Key="Color.Overlay">#FCF3EC</Color>
    <Color x:Key="Color.DarkOverlay">#FFFFFF</Color>
    <Color x:Key="Color.HeaderAlternative">#FCE4D2</Color>
    <Color x:Key="Color.BodyAlternative">#FFFBF0</Color>
    <Color x:Key="Color.Button">#333333</Color>
    <Color x:Key="Color.Text">#1A1A1A</Color>
    <Color x:Key="Color.TextContrast">#F5F5F5</Color>
    <Color x:Key="Color.TextInactive">#666666</Color>
    <Color x:Key="Color.PreviewBackground">#FFFFFF</Color>
    <Color x:Key="Color.Label">#7A7A7A</Color>
    <Color x:Key="Color.Icon">#1A1A1A</Color>
    <Color x:Key="Color.IconInactive">#666666</Color>
    <Color x:Key="Color.Border">#A0A0A0</Color>
    <Color x:Key="Color.DashboardBackground">#C8C8C8</Color>
    <Color x:Key="Color.SelectedBorder">#1A1A1A</Color>
    <Color x:Key="Color.SelectionDisabledBackground">#CCCCCC</Color>

    <Color x:Key="Color.Signature">#00929D</Color>
    <Color x:Key="Color.SignatureLight">#CCEAEC</Color>
    <Color x:Key="Color.SignatureDark">#006D75</Color>
    <Color x:Key="Color.SignatureAccent">#00929D</Color>

    <SolidColorBrush x:Key="Brush.Background" Color="{DynamicResource Color.Background}" />
    <SolidColorBrush x:Key="Brush.DarkBackground" Color="{DynamicResource Color.DarkBackground}" />
    <SolidColorBrush x:Key="Brush.PreviewBackground" Color="{DynamicResource Color.PreviewBackground}" />

    <SolidColorBrush x:Key="Brush.Button" Color="{DynamicResource Color.Button}" />
    <SolidColorBrush x:Key="Brush.ButtonPressed" Opacity="0.08" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.ButtonTextInactive" Opacity="0.38" Color="{DynamicResource Color.Text}" />
    <SolidColorBrush x:Key="Brush.ButtonTextDisabled" Opacity="0.30" Color="{DynamicResource Color.Overlay}" />
    <SolidColorBrush x:Key="Brush.ButtonHover" Opacity="0.2" Color="{DynamicResource Color.Signature}" />

    <SolidColorBrush x:Key="Brush.PrimaryButton" Opacity="0.5" Color="{DynamicResource Color.Signature}" />
    <SolidColorBrush x:Key="Brush.PrimaryButtonMouseOver" Opacity="0.24" Color="{DynamicResource Color.Signature}" />
    <SolidColorBrush x:Key="Brush.PrimaryButtonPressed" Color="{DynamicResource Color.SignatureDark}" />
    <SolidColorBrush x:Key="Brush.PrimaryButtonDisabled" Opacity="0.5" Color="{DynamicResource Color.SignatureDark}" />

    <SolidColorBrush x:Key="Brush.Text" Color="{DynamicResource Color.Text}" />
    <SolidColorBrush x:Key="Brush.TextContrast" Color="{DynamicResource Color.TextContrast}" />
    <SolidColorBrush x:Key="Brush.TextInactive" Color="{DynamicResource Color.TextInactive}" />

    <SolidColorBrush x:Key="Brush.Icon" Color="{DynamicResource Color.Icon}" />
    <SolidColorBrush x:Key="Brush.IconInactive" Color="{DynamicResource Color.IconInactive}" />
    <SolidColorBrush x:Key="Brush.Border" Color="{DynamicResource Color.Border}" />

    <SolidColorBrush x:Key="Brush.DashboardBackground" Color="{DynamicResource Color.DashboardBackground}" />
    <SolidColorBrush x:Key="Brush.HeaderAlternative" Opacity="0.5" Color="{DynamicResource Color.HeaderAlternative}"/>
    <SolidColorBrush x:Key="Brush.BodyAlternative" Color="{DynamicResource Color.BodyAlternative}"/>

    <SolidColorBrush x:Key="Brush.Signature" Color="{DynamicResource Color.Signature}" />
    <SolidColorBrush x:Key="Brush.SignatureLight" Color="{DynamicResource Color.SignatureLight}" />
    <SolidColorBrush x:Key="Brush.SignatureDark" Color="{DynamicResource Color.SignatureDark}" />
    <SolidColorBrush x:Key="Brush.SignatureAccent" Color="{DynamicResource Color.SignatureAccent}" />
</ResourceDictionary>

使用方法

Styles/
|—— Border.xaml			# Border 样式
|—— Button.xaml			# Button 样式
|—— Calendar.xaml		# Calendar 样式
|—— ComboBox.xaml       # ComboBox 样式
|—— DataGrid.xaml		# DataGrid 样式
|—— DatePicker.xaml     # DatePicker 样式
|—— ListView.xaml		# ListView 样式
|—— RadioButton.xaml    # RadioButton 样式
|—— ScrollViewer.xaml	# ScrollViewer 样式
|—— TapItem.xaml        # TapItem 样式
|—— TextBlock.xaml		# TextBlock 样式
|—— TextBox.xaml        # TextBox 样式
└── ToggleButton.xaml	# ToggleButton 样式

在XAML中使用

Border

  • Border.Base

    <Border Style="{StaticResource Border.Base}">
    <Grid>
    	  <Grid.RowDefinitions>
    		  <RowDefinition Height="30" />
    		  <RowDefinition />
    	  </Grid.RowDefinitions>
    	  <Border Background="#0078D7">
    		  <TextBlock Text="运动测试" 
    				  Style="{StaticResource TextBlock.Primary}"
    				  HorizontalAlignment="Left"
    				  FontWeight="Normal"
    				  Margin="10 0 0 0"/>
    	  </Border>
    	  <WrapPanel Grid.Row="1">
    		  <Button Command="{Binding MoveAxisOnePointCommand}" Style="{StaticResource Button.Debug}"
    			  Content="MoveAxisPoint"/>
    		  <Button Command="{Binding MoveAxisTwoPointCommand}" Style="{StaticResource Button.Debug}"
    			  Content="MoveAxisPoint(2)"/>
    		  <Button Command="{Binding MoveAxisOnePointFixsetCommand}" Style="{StaticResource Button.Debug}"
    			  Content="MoveAxisPointFixset"/>
    		  <Button Command="{Binding MoveAxisTwoPointFixsetCommand}" Style="{StaticResource Button.Debug}"
    			  Content="MoveAxisPointFixset(2)"/>
    	  </WrapPanel>
    </Grid>
    </Border>
    

    Button

  • Button.Base

    <Button Width="100"
    		Height="36"
    		Command="{Binding CancelCommand}"
    		Content="取消"
    		FontSize="20"
    		Style="{StaticResource Button.Base}" />
    
  • Button.Primary

    <Button Content="显示设置"
    		Style="{StaticResource Button.Primary}"
    		Width="120"
    		Height="30"/>
    
  • Button.Secondary

    <Button Content="显示设置"
    		Style="{StaticResource Button.Secondary}"
    		Width="120"
    		Height="30"/>
    
  • Button.WithIcon

    xmlns:c="clr-namespace:SKMC.UI.CustomControls;assembly=SKMC.UI"
    
    <c:SKButton
    	Width="125"
    	Height="40"
    	Margin="5"
    	Command="{Binding RetryAllCommand}"
    	Content="自动重试"
    	Style="{StaticResource Button.WithIcon}" 
    	Icon="{StaticResource Icon.Restart}"
    	Background="{StaticResource Brush.DebugLog}"
    	IconSize="{StaticResource FontSize.Callout}"/>
    

Button.WithIcon样式:设置*Icon*属性按钮将会显示图标;不设置默认不显示。设置*IconSize*将根据设置值调整Icon图标大小,宽度长度相同。

  • Button.Debug

    <Button Command="{Binding ExceptionTestCommand}" Style="{StaticResource Button.Debug}"
    Content="异常弹窗测试"/>
    
  • Button.WindowControl

  • Button.SimpleIcon

    <Button
    Command="{Binding DataContext.GetEncCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
    CommandParameter="{Binding}"
    Content="{StaticResource Icon.ChevronDoubleLeft}"
    Style="{StaticResource Button.SimpleIcon}"
    Margin="0"/>
    

    ComboBox

  • ComboBox.Primary

    <ComboBox
    	x:Name="Rolebox"
    	Width="230"
    	Margin="20,0,10,0"
    	DisplayMemberPath="ShowName"
    	FontSize="{StaticResource FontSize.Callout}"
    	IsSynchronizedWithCurrentItem="True"
    	ItemsSource="{Binding ClientRoleAccesser.ClientRoles}"
    	SelectedItem="{Binding ClientRole}" 
    	Style="{StaticResource ComboBox.Primary}"/>
    

    DataGrid

  • DataGrid.Primary

    <DataGrid
    AutoGenerateColumns="False"
    CanUserAddRows="False"
    ItemsSource="{Binding ClientCacher.CurrentExceptions}"
    Style="{StaticResource DataGrid.Primary}">
    <DataGrid.Columns>
        <DataGridTextColumn
            Width="0.3*"
            Binding="{Binding Code}"
            Header="异常码" 
            IsReadOnly="True"/>
        <DataGridTextColumn
            Width="0.8*"
            Binding="{Binding Name}"
            Header="异常名称" 
            IsReadOnly="True"/>
        <DataGridTextColumn
            Width="0.6*"
            Binding="{Binding EncounterTime}"
            Header="异常时间" 
            IsReadOnly="True"/>
        <DataGridTextColumn
            Width="0.3*"
            Binding="{Binding Level}"
            Header="异常级别" 
            IsReadOnly="True"/>
        <DataGridTextColumn
            Width="*"
            Binding="{Binding Detail}"
            Header="详细信息" 
            IsReadOnly="True"/>
        <DataGridTemplateColumn Width="0.6*" Header="可用处理">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
                        <Button
                            Margin="5,0"
                            Command="{Binding DataContext.RetryCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}"
                            CommandParameter="{Binding}"
                            Content="重试"
                            Visibility="{Binding CanRetry, Converter={StaticResource systemVisibilityConverter}}" />
    
                        <Button
                            Margin="5,0"
                            Command="{Binding DataContext.IgnoreCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}"
                            CommandParameter="{Binding}"
                            Content="忽略"
                            Visibility="{Binding CanIgnore, Converter={StaticResource systemVisibilityConverter}}" />
                        <TextBlock Text="{Binding RetryMsg}" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
    </DataGrid>
    
  • DataGrid.EditingTextBox

    <DataGrid
    x:Name="OriginGrid"
    Grid.Column="0"
    IsReadOnly="False"
    ItemsSource="{Binding MachineOffsets}"
    Style="{StaticResource DataGrid.Primary}"
    Margin="5">
    <DataGrid.Columns>
        <DataGridTextColumn
            Width="4*"
            Binding="{Binding Code, UpdateSourceTrigger=PropertyChanged}"
            Header="轴代码"
            IsReadOnly="True" />
        <DataGridTextColumn
            Width="6*"
            Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}"
            Header="名称"
            IsReadOnly="True" />
        <DataGridTextColumn
            Width="2*"
            Binding="{Binding Axis_No, UpdateSourceTrigger=PropertyChanged}"
            Header="轴号"
            IsReadOnly="True" />
        <DataGridTextColumn
            Width="10*"
            Binding="{Binding Offset, StringFormat={}{0:F3}, UpdateSourceTrigger=PropertyChanged}"
            Header="原点偏差值(单位:mm;值的正负号与轴的正负方向一致)" 
            EditingElementStyle="{StaticResource DataGrid.EditingTextBox}"/>
        <DataGridTextColumn
            Width="10*"
            Binding="{Binding Merged, UpdateSourceTrigger=PropertyChanged}"
            Header="是否已合并(0代表未合并;1代表已合并)" 
            EditingElementStyle="{StaticResource DataGrid.EditingTextBox}"/>
    </DataGrid.Columns>
    </DataGrid>
    

    DatePicker

  • DatePicker.Primary

    <DatePicker
    	SelectedDate="{Binding SelectedDate}"
    	Style="{StaticResource DatePicker.Primary}">
    </DatePicker>
    

    ListView

  • ListView.Primary

    <ListView
    ItemsSource="{Binding Source={StaticResource ProductionLogs}}"
    Style="{StaticResource ListView.Primary}">
    <ListView.View>
        <GridView ColumnHeaderContainerStyle="{StaticResource ListView.ColumnHeader}">
            <GridViewColumn
                Width="160"
                DisplayMemberBinding="{Binding Timestamp}"
                Header="时间"/>
            <GridViewColumn
                Width="60"
                Header="级别">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="AlarmLevel" Text="{Binding Level}" HorizontalAlignment="Center"
                           VerticalAlignment="Center"/>
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding Level}" Value="Debug">
                                <Setter TargetName="AlarmLevel" Property="Foreground" Value="{DynamicResource Brush.DebugLog}"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Level}" Value="Warn">
                                <Setter TargetName="AlarmLevel" Property="Foreground" Value="{DynamicResource Brush.Warning}"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Level}" Value="Error">
                                <Setter TargetName="AlarmLevel" Property="Foreground" Value="{DynamicResource Brush.Error}"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn
                Width="50"
                DisplayMemberBinding="{Binding Thread}"
                Header="线程" />
            <GridViewColumn
                Width="730"
                DisplayMemberBinding="{Binding Message}"
                Header="消息" />
        </GridView>
    </ListView.View>
    </ListView>
    

    RadioButton

  • RadioButton.SystemMenu

    xmlns:c="clr-namespace:SKMC.UI.CustomControls;assembly=SKMC.UI"
    
    <c:SKRadioButton
    	Width="105"
    	Height="48"
    	Command="{Binding ForwardCommand}"
    	CommandParameter="RecordView"
    	IsChecked="{Binding SelectView, Converter={StaticResource radio2BoolConverter}, ConverterParameter=RecordView, Mode=TwoWay}"
    	Style="{StaticResource RadioButton.SystemMenu}"
    	Content="记录"
    	Icon="{StaticResource Icon.Database}">
    	<c:SKRadioButton.Visibility>
    		<MultiBinding Converter="{StaticResource appAccessVisibleConverter}">
    			<Binding Path="CommandParameter" RelativeSource="{RelativeSource Self}" />
    			<Binding Path="ClientRoleAccesser.AccessToken" />
    		</MultiBinding>
    	</c:SKRadioButton.Visibility>
    </c:SKRadioButton>
    
  • RadioButton.Base

  • RadioButton.Primary

    <RadioButton
    Width="128"
    Height="40"
    Command="{Binding OpenCommand}"
    CommandParameter="MotionAxisView"
    Content="电机"
    IsChecked="True"
    Style="{StaticResource RadioButton.Primary}">
    <RadioButton.Visibility>
        <MultiBinding Converter="{StaticResource appAccessVisibleConverter}">
            <Binding Path="CommandParameter" RelativeSource="{RelativeSource Self}" />
            <Binding Path="AccessToken" />
        </MultiBinding>
    </RadioButton.Visibility>
    </RadioButton>
    

    ScrollViewer

  • ScrollViewer.Default

    <ScrollViewer
    Name="AxisPanel"
    Grid.Row="1"
    Margin="0,5,0,0"
    HorizontalScrollBarVisibility="Disabled"
    VerticalScrollBarVisibility="Auto"
    Style="{StaticResource ScrollViewer.Default}">
    <ItemsControl ItemsSource="{Binding AxisPanels}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid VerticalAlignment="Top" Columns="5" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <local:MotionAxisPanel />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.IsEnabled>
            <MultiBinding Converter="{StaticResource appAccessEnableConverter}" ConverterParameter="MotionAxisOper">
                <Binding Path="MachineStatusControl.Status" />
                <Binding Path="ClientRoleAccesser.AccessToken" />
            </MultiBinding>
        </ItemsControl.IsEnabled>
    </ItemsControl>
    </ScrollViewer>
    

    TapItem

  • TapItem.Primary

    <TabItem IsSelected="True"
    		 Style="{StaticResource TapItem.Primary}"
    		 Header="非线性校准">
    

    TextBlock

  • TextBlock.Primary

    <TextBlock
    	FontSize="20"
    	Text="原密码" 
    	FontWeight="Normal"
    	Style="{StaticResource TextBlock.Primary}"/>
    

    TextBox

  • TextBox.Primary

    xmlns:c="clr-namespace:SKMC.UI.CustomControls;assembly=SKMC.UI"
    
    <c:SKTextBox
    	Style="{StaticResource TextBox.Primary}"
    	Grid.Row="0"
    	Grid.Column="3"
    	Text="{Binding VelInput, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:N3}}" 
    	Unit="{Binding MotionAxis.UnitName}"
    	Grid.ColumnSpan="3"
    	Margin="0 1 5 0"/>
    

Unit属性:显示文本框输入内容的单位,不设置不显示。UnitSize属性:设置Unit单位显示大小。Icon属性:显示文本框的图标,不设置不显示。NumpadActivity属性:True激活数字输入小键盘,False不激活小键盘,默认值False。 SKTextBox类:内部可根据具体需求增加依赖属性,即使创建不使用也无太大影响。

  • TextBox.SimpleWatermark

    <TextBox x:Name="productCodetbx" Width="250" Height="30" FontSize="15"
         VerticalContentAlignment="Center"
         Style="{StaticResource TextBox.SimpleWatermark}"
         Tag="请输入产品码查询">
    

    ToggleButton

  • ToggleButton.Base

  • ToggleButton.Primary

  • ToggleButton.SimpleLamp

    <ToggleButton
    	Width="100"
    	Height="40"
    	IsChecked="False"
    	Style="{StaticResource ToggleButton.SimpleLamp}"
    	Content="下柜灯"
    	Margin="0 2 0 2"/>
    
  • ToggleButton.SimpleLocker

    <ToggleButton
    	IsChecked="False"
    	FontSize="30"
    	Style="{StaticResource ToggleButton.SimpleLocker}"
    	Margin="0 10 0 2"
    	ToolTip="安全门锁"/>
    
  • ToggleButton.ThemeSwitch

    <ToggleButton
    	FontSize="30"
    	Style="{StaticResource ToggleButton.ThemeSwitch}"
    	Command="{Binding ThemeSwitchCommand}"
    	CommandParameter="{Binding Path=IsChecked,RelativeSource={RelativeSource Self}}"
    	Margin="10"
    	ToolTip="切换主题"/>
    

    用户控件

    NumpadControl

  • NumpadControl.xaml

    <DataGrid
    	x:Name="SpeedGrid"
    	Grid.Row="1"
    	Margin="10,10,10,10"
    	Style="{StaticResource DataGrid.Primary}"
    	ItemsSource="{Binding RecipeSpeeds, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    	<DataGrid.Columns>
    		<DataGridTemplateColumn Header="最大速度(mm/s)" Width="*">
    			<DataGridTemplateColumn.CellTemplate>
    				<DataTemplate>
    					<c:SKTextBox Text="{Binding VelInput, UpdateSourceTrigger=PropertyChanged}"
    								 Style="{StaticResource TextBox.Primary}"
    								 NumpadActivity="True"
    								 BorderThickness="0"
    								 Unit="mm/s"
    								 FontSize="{StaticResource FontSize.Body}"/>
    				</DataTemplate>
    			</DataGridTemplateColumn.CellTemplate>
    		</DataGridTemplateColumn>
    	</DataGrid.Columns>
    </DataGrid>
    

    NumpadControl数字键盘控件依附SKTextBox控件,且输入文本框属性*NumpadActivity*设置为True,在鼠标点击文本框时弹出数字小键盘。*NumpadActivity*设置为False,文本框为普通输入框不弹数字键盘。 NumpadControl数字键盘内文本框可根据SKTextBox同步显示单位,若SKTextBox设置了单位,则数字键盘内显示相同单位,反之则无。

安装说明

  1. 克隆或下载本项目
  2. 可直接添加到目标项目使用

依赖项

  • 纯手搓无非官方第三方依赖