TextBox.xaml 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <ResourceDictionary
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:c="clr-namespace:SKMC.UI.CustomControls">
  5. <ResourceDictionary.MergedDictionaries>
  6. <ResourceDictionary Source="pack://application:,,,/SKMC.UI;component/Assets/Brushes.xaml" />
  7. </ResourceDictionary.MergedDictionaries>
  8. <!-- 主要输入文本框 -->
  9. <Style x:Key="TextBox.Primary" TargetType="{x:Type c:SKTextBox}">
  10. <Style.Setters>
  11. <Setter Property="VerticalContentAlignment" Value="Center" />
  12. <Setter Property="VerticalAlignment" Value="Stretch" />
  13. <Setter Property="HorizontalAlignment" Value="Stretch" />
  14. <Setter Property="BorderThickness" Value="1" />
  15. <Setter Property="FontSize" Value="12" />
  16. <Setter Property="Foreground" Value="{DynamicResource Brush.Text}" />
  17. <Setter Property="IconSize" Value="10" />
  18. <Setter Property="Template">
  19. <Setter.Value>
  20. <ControlTemplate TargetType="{x:Type c:SKTextBox}">
  21. <Border
  22. x:Name="boder"
  23. Background="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}"
  24. BorderThickness="{TemplateBinding BorderThickness}"
  25. CornerRadius="{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}}">
  26. <FrameworkElement.Style>
  27. <Style TargetType="{x:Type Border}">
  28. <Setter Property="BorderBrush" Value="{DynamicResource Brush.Border}" />
  29. <Style.Triggers>
  30. <DataTrigger Binding="{Binding IsFocused, ElementName=TextBox}" Value="True">
  31. <Setter Property="BorderBrush" Value="{DynamicResource Brush.Signature}" />
  32. </DataTrigger>
  33. <DataTrigger Binding="{Binding IsEnabled, ElementName=TextBox}" Value="False">
  34. <Setter Property="BorderBrush" Value="{DynamicResource Brush.IconInactive}" />
  35. </DataTrigger>
  36. </Style.Triggers>
  37. </Style>
  38. </FrameworkElement.Style>
  39. <Grid>
  40. <Grid.ColumnDefinitions>
  41. <ColumnDefinition Width="Auto" />
  42. <ColumnDefinition Width="*" />
  43. <ColumnDefinition Width="Auto" />
  44. </Grid.ColumnDefinitions>
  45. <Path
  46. Grid.Column="0"
  47. Width="{TemplateBinding IconSize}"
  48. Height="{TemplateBinding IconSize}"
  49. Margin="5"
  50. HorizontalAlignment="Center"
  51. VerticalAlignment="Center"
  52. Data="{TemplateBinding Icon}"
  53. Fill="{TemplateBinding Foreground}"
  54. Stretch="Uniform">
  55. <FrameworkElement.Style>
  56. <Style TargetType="{x:Type Path}">
  57. <Style.Triggers>
  58. <DataTrigger Binding="{Binding Icon, RelativeSource={RelativeSource TemplatedParent}}" Value="{x:Null}">
  59. <Setter Property="Visibility" Value="Collapsed" />
  60. </DataTrigger>
  61. <DataTrigger Binding="{Binding Icon, RelativeSource={RelativeSource TemplatedParent}}" Value="">
  62. <Setter Property="Visibility" Value="Collapsed" />
  63. </DataTrigger>
  64. </Style.Triggers>
  65. </Style>
  66. </FrameworkElement.Style>
  67. </Path>
  68. <!-- 输入框 -->
  69. <TextBox
  70. Name="TextBox"
  71. Grid.Column="1"
  72. HorizontalAlignment="Stretch"
  73. VerticalAlignment="Stretch"
  74. HorizontalContentAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource TemplatedParent}}"
  75. VerticalContentAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource TemplatedParent}}"
  76. AcceptsReturn="{Binding AcceptsReturn, RelativeSource={RelativeSource TemplatedParent}}"
  77. Background="Transparent"
  78. CaretBrush="{TemplateBinding Foreground}"
  79. FontSize="{TemplateBinding FontSize}"
  80. Foreground="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}"
  81. SelectionBrush="{DynamicResource Brush.Border}"
  82. Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
  83. TextWrapping="{Binding TextWrapping, RelativeSource={RelativeSource TemplatedParent}}"
  84. ToolTip="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}">
  85. <FrameworkElement.Style>
  86. <Style TargetType="{x:Type TextBox}">
  87. <Setter Property="BorderThickness" Value="0" />
  88. <Setter Property="TextBoxBase.CaretBrush" Value="{DynamicResource Brush.Text}" />
  89. <Setter Property="Padding" Value="4,0,0,0" />
  90. <Setter Property="ToolTipService.ShowOnDisabled" Value="True" />
  91. <Setter Property="VerticalAlignment" Value="Center" />
  92. <Style.Triggers>
  93. <DataTrigger Binding="{Binding TextWrapping, RelativeSource={RelativeSource TemplatedParent}}" Value="Wrap">
  94. <Setter Property="TextBoxBase.AcceptsReturn" Value="True" />
  95. </DataTrigger>
  96. <DataTrigger Binding="{Binding TextWrapping, RelativeSource={RelativeSource TemplatedParent}}" Value="WrapWithOverflow">
  97. <Setter Property="TextBoxBase.AcceptsReturn" Value="True" />
  98. </DataTrigger>
  99. <DataTrigger Binding="{Binding TextWrapping, RelativeSource={RelativeSource TemplatedParent}}" Value="NoWrap">
  100. <Setter Property="TextBoxBase.AcceptsReturn" Value="False" />
  101. </DataTrigger>
  102. <!--<DataTrigger Binding="{Binding Unit, RelativeSource={RelativeSource TemplatedParent}}" Value="{x:Null}">
  103. <Setter Property="Padding" Value="5,0" />
  104. </DataTrigger>
  105. <DataTrigger Value="" Binding="{Binding Unit, RelativeSource={RelativeSource TemplatedParent}}">
  106. <Setter Property="Padding" Value="5,0" />
  107. </DataTrigger>-->
  108. </Style.Triggers>
  109. </Style>
  110. </FrameworkElement.Style>
  111. </TextBox>
  112. <!-- 单位 -->
  113. <Label
  114. Grid.Column="2"
  115. HorizontalAlignment="Right"
  116. VerticalAlignment="Bottom"
  117. Content="{Binding Unit, RelativeSource={RelativeSource TemplatedParent}}"
  118. FontSize="{TemplateBinding UnitSize}"
  119. Foreground="{DynamicResource Brush.Label}">
  120. <FrameworkElement.Style>
  121. <Style TargetType="{x:Type Label}">
  122. <Setter Property="VerticalAlignment" Value="Bottom" />
  123. <Setter Property="HorizontalAlignment" Value="Right" />
  124. <Setter Property="Background" Value="Transparent" />
  125. <Setter Property="BorderThickness" Value="0" />
  126. <Style.Triggers>
  127. <DataTrigger Binding="{Binding Unit, RelativeSource={RelativeSource TemplatedParent}}" Value="{x:Null}">
  128. <Setter Property="Visibility" Value="Collapsed" />
  129. </DataTrigger>
  130. <DataTrigger Binding="{Binding Unit, RelativeSource={RelativeSource TemplatedParent}}" Value="">
  131. <Setter Property="Visibility" Value="Collapsed" />
  132. </DataTrigger>
  133. </Style.Triggers>
  134. </Style>
  135. </FrameworkElement.Style>
  136. </Label>
  137. </Grid>
  138. </Border>
  139. <ControlTemplate.Triggers>
  140. <Trigger Property="Validation.HasError" Value="True">
  141. <Setter TargetName="boder" Property="BorderBrush" Value="{StaticResource Brush.Error}" />
  142. </Trigger>
  143. </ControlTemplate.Triggers>
  144. </ControlTemplate>
  145. </Setter.Value>
  146. </Setter>
  147. </Style.Setters>
  148. </Style>
  149. <!-- 简单水印样式 -->
  150. <Style x:Key="TextBox.SimpleWatermark" TargetType="{x:Type TextBox}">
  151. <Setter Property="BorderThickness" Value="0.5" />
  152. <Setter Property="Foreground" Value="{DynamicResource Brush.Text}" />
  153. <Setter Property="BorderBrush" Value="{DynamicResource Brush.Border}" />
  154. <Setter Property="FontFamily" Value="{DynamicResource FontFamily.Global}" />
  155. <Setter Property="FontSize" Value="{DynamicResource FontSize.Body}" />
  156. <Setter Property="CaretBrush" Value="{DynamicResource Brush.Text}"/>
  157. <Setter Property="Template">
  158. <Setter.Value>
  159. <ControlTemplate TargetType="{x:Type TextBox}">
  160. <Grid>
  161. <ScrollViewer x:Name="PART_ContentHost" VerticalAlignment="Center" />
  162. <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
  163. <TextBlock
  164. x:Name="mark"
  165. Margin="5,0,0,0"
  166. Padding="0"
  167. VerticalAlignment="Center"
  168. Foreground="{DynamicResource Brush.Text}"
  169. IsHitTestVisible="False"
  170. Opacity="0.5"
  171. Text="{TemplateBinding Tag}">
  172. <TextBlock.Style>
  173. <Style TargetType="TextBlock">
  174. <Setter Property="Visibility" Value="Collapsed" />
  175. <Style.Triggers>
  176. <DataTrigger Binding="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}}" Value="">
  177. <Setter Property="Visibility" Value="Visible" />
  178. </DataTrigger>
  179. </Style.Triggers>
  180. </Style>
  181. </TextBlock.Style>
  182. </TextBlock>
  183. </Border>
  184. </Grid>
  185. <ControlTemplate.Triggers>
  186. <Trigger Property="IsSelectionActive" Value="True">
  187. <Setter TargetName="mark" Property="Visibility" Value="Hidden" />
  188. </Trigger>
  189. </ControlTemplate.Triggers>
  190. </ControlTemplate>
  191. </Setter.Value>
  192. </Setter>
  193. </Style>
  194. <!-- 基本文本框 -->
  195. <Style x:Key="TextBox.Base" TargetType="{x:Type TextBox}">
  196. <Style.Setters>
  197. <Setter Property="VerticalContentAlignment" Value="Center" />
  198. <Setter Property="HorizontalContentAlignment" Value="Center" />
  199. <Setter Property="VerticalAlignment" Value="Stretch" />
  200. <Setter Property="HorizontalAlignment" Value="Stretch" />
  201. <Setter Property="BorderThickness" Value="1" />
  202. <Setter Property="FontSize" Value="12" />
  203. <Setter Property="Background" Value="{DynamicResource Brush.PreviewBackground}"/>
  204. <Setter Property="Foreground" Value="{DynamicResource Brush.Text}" />
  205. <Setter Property="FontFamily" Value="{DynamicResource FontFamily.Global}"/>
  206. <Setter Property="Template">
  207. <Setter.Value>
  208. <ControlTemplate TargetType="{x:Type TextBox}">
  209. <Border
  210. x:Name="boder"
  211. Background="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}"
  212. BorderThickness="{TemplateBinding BorderThickness}">
  213. <FrameworkElement.Style>
  214. <Style TargetType="{x:Type Border}">
  215. <Setter Property="BorderBrush" Value="{DynamicResource Brush.Border}" />
  216. <Style.Triggers>
  217. <DataTrigger Binding="{Binding IsFocused, ElementName=TextBox}" Value="True">
  218. <Setter Property="BorderBrush" Value="{DynamicResource Brush.Signature}" />
  219. </DataTrigger>
  220. <DataTrigger Binding="{Binding IsEnabled, ElementName=TextBox}" Value="False">
  221. <Setter Property="BorderBrush" Value="{DynamicResource Brush.IconInactive}" />
  222. </DataTrigger>
  223. </Style.Triggers>
  224. </Style>
  225. </FrameworkElement.Style>
  226. <!-- 输入框 -->
  227. <TextBox
  228. Name="TextBox"
  229. HorizontalAlignment="Stretch"
  230. VerticalAlignment="Stretch"
  231. HorizontalContentAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource TemplatedParent}}"
  232. VerticalContentAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource TemplatedParent}}"
  233. AcceptsReturn="{Binding AcceptsReturn, RelativeSource={RelativeSource TemplatedParent}}"
  234. Background="Transparent"
  235. CaretBrush="{TemplateBinding Foreground}"
  236. FontSize="{TemplateBinding FontSize}"
  237. Foreground="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}"
  238. SelectionBrush="{DynamicResource Brush.Border}"
  239. Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
  240. TextWrapping="{Binding TextWrapping, RelativeSource={RelativeSource TemplatedParent}}"
  241. ToolTip="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}">
  242. <FrameworkElement.Style>
  243. <Style TargetType="{x:Type TextBox}">
  244. <Setter Property="BorderThickness" Value="0" />
  245. <Setter Property="TextBoxBase.CaretBrush" Value="{DynamicResource Brush.Text}" />
  246. <Setter Property="Padding" Value="4,0,0,0" />
  247. <Setter Property="ToolTipService.ShowOnDisabled" Value="True" />
  248. <Setter Property="VerticalAlignment" Value="Center" />
  249. <Style.Triggers>
  250. <DataTrigger Binding="{Binding TextWrapping, RelativeSource={RelativeSource TemplatedParent}}" Value="Wrap">
  251. <Setter Property="TextBoxBase.AcceptsReturn" Value="True" />
  252. </DataTrigger>
  253. <DataTrigger Binding="{Binding TextWrapping, RelativeSource={RelativeSource TemplatedParent}}" Value="WrapWithOverflow">
  254. <Setter Property="TextBoxBase.AcceptsReturn" Value="True" />
  255. </DataTrigger>
  256. <DataTrigger Binding="{Binding TextWrapping, RelativeSource={RelativeSource TemplatedParent}}" Value="NoWrap">
  257. <Setter Property="TextBoxBase.AcceptsReturn" Value="False" />
  258. </DataTrigger>
  259. <!--<DataTrigger Binding="{Binding Unit, RelativeSource={RelativeSource TemplatedParent}}" Value="{x:Null}">
  260. <Setter Property="Padding" Value="5,0" />
  261. </DataTrigger>
  262. <DataTrigger Value="" Binding="{Binding Unit, RelativeSource={RelativeSource TemplatedParent}}">
  263. <Setter Property="Padding" Value="5,0" />
  264. </DataTrigger>-->
  265. </Style.Triggers>
  266. </Style>
  267. </FrameworkElement.Style>
  268. </TextBox>
  269. </Border>
  270. <ControlTemplate.Triggers>
  271. <Trigger Property="Validation.HasError" Value="True">
  272. <Setter TargetName="boder" Property="BorderBrush" Value="{StaticResource Brush.Error}" />
  273. </Trigger>
  274. </ControlTemplate.Triggers>
  275. </ControlTemplate>
  276. </Setter.Value>
  277. </Setter>
  278. </Style.Setters>
  279. </Style>
  280. </ResourceDictionary>