引言

因要符合UI设计, 需要一个圆角的 DataGrid 样式,其需要一个,所以需要重写DataGrid的样式,

代码

具体样式代码如下

  1. <ResourceDictionary
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:System="clr-namespace:System;assembly=mscorlib"
  5. xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic">
  6. <!--#region 基础设置-->
  7. <SolidColorBrush x:Key="DataGridBackground" Color="#DCE3EC" />
  8. <SolidColorBrush x:Key="DataGridForeground" Color="#313F56" />
  9. <System:Double x:Key="DataGridFontSize">22</System:Double>
  10. <SolidColorBrush x:Key="{x:Static DataGrid.FocusBorderBrushKey}" Color="#FF000000" />
  11. <BooleanToVisibilityConverter x:Key="bool2VisibilityConverter" />
  12. <Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}">
  13. <Setter Property="Height" Value="8" />
  14. <Setter Property="Background" Value="Transparent" />
  15. <Setter Property="Cursor" Value="SizeNS" />
  16. <Setter Property="Template">
  17. <Setter.Value>
  18. <ControlTemplate TargetType="{x:Type Thumb}">
  19. <Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" />
  20. </ControlTemplate>
  21. </Setter.Value>
  22. </Setter>
  23. </Style>
  24. <Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}">
  25. <Setter Property="Width" Value="8" />
  26. <Setter Property="Background" Value="Transparent" />
  27. <Setter Property="Cursor" Value="SizeWE" />
  28. <Setter Property="Template">
  29. <Setter.Value>
  30. <ControlTemplate TargetType="{x:Type Thumb}">
  31. <Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" />
  32. </ControlTemplate>
  33. </Setter.Value>
  34. </Setter>
  35. </Style>
  36. <Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}" TargetType="{x:Type Button}">
  37. <Setter Property="Template">
  38. <Setter.Value>
  39. <ControlTemplate TargetType="{x:Type Button}">
  40. <Grid>
  41. <Rectangle
  42. x:Name="Border"
  43. Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
  44. SnapsToDevicePixels="True" />
  45. <Polygon
  46. x:Name="Arrow"
  47. Margin="8,8,3,3"
  48. HorizontalAlignment="Right"
  49. VerticalAlignment="Bottom"
  50. Fill="Black"
  51. Opacity="0.15"
  52. Points="0,10 10,10 10,0"
  53. Stretch="Uniform" />
  54. </Grid>
  55. <ControlTemplate.Triggers>
  56. <Trigger Property="IsMouseOver" Value="True">
  57. <Setter TargetName="Border" Property="Stroke" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" />
  58. </Trigger>
  59. <Trigger Property="IsPressed" Value="True">
  60. <Setter TargetName="Border" Property="Fill" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" />
  61. </Trigger>
  62. <Trigger Property="IsEnabled" Value="False">
  63. <Setter TargetName="Arrow" Property="Visibility" Value="Collapsed" />
  64. </Trigger>
  65. </ControlTemplate.Triggers>
  66. </ControlTemplate>
  67. </Setter.Value>
  68. </Setter>
  69. </Style>
  70. <!--#endregion-->
  71. <!--#region 滚动条-->
  72. <Style x:Key="ScrollBarFocusVisualStyle1" TargetType="{x:Type Control}">
  73. <Setter Property="Template">
  74. <Setter.Value>
  75. <ControlTemplate TargetType="{x:Type Control}">
  76. <Grid />
  77. </ControlTemplate>
  78. </Setter.Value>
  79. </Setter>
  80. </Style>
  81. <Style x:Key="FocusVisual">
  82. <Setter Property="Control.Template">
  83. <Setter.Value>
  84. <ControlTemplate>
  85. <Rectangle
  86. Margin="2"
  87. SnapsToDevicePixels="true"
  88. Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
  89. StrokeDashArray="1 2"
  90. StrokeThickness="1" />
  91. </ControlTemplate>
  92. </Setter.Value>
  93. </Setter>
  94. </Style>
  95. <SolidColorBrush x:Key="ScrollBar.Static.Background" Color="#F0F0F0" />
  96. <SolidColorBrush x:Key="ScrollBar.Static.Border" Color="#F0F0F0" />
  97. <SolidColorBrush x:Key="ScrollBar.Static.Glyph" Color="#606060" />
  98. <SolidColorBrush x:Key="ScrollBar.Static.Thumb" Color="#CDCDCD" />
  99. <SolidColorBrush x:Key="ScrollBar.MouseOver.Background" Color="#DADADA" />
  100. <SolidColorBrush x:Key="ScrollBar.MouseOver.Border" Color="#DADADA" />
  101. <SolidColorBrush x:Key="ScrollBar.MouseOver.Glyph" Color="#000000" />
  102. <SolidColorBrush x:Key="ScrollBar.MouseOver.Thumb" Color="#A6A6A6" />
  103. <SolidColorBrush x:Key="ScrollBar.Pressed.Background" Color="#606060" />
  104. <SolidColorBrush x:Key="ScrollBar.Pressed.Border" Color="#606060" />
  105. <SolidColorBrush x:Key="ScrollBar.Pressed.Thumb" Color="#606060" />
  106. <SolidColorBrush x:Key="ScrollBar.Pressed.Glyph" Color="#FFFFFF" />
  107. <SolidColorBrush x:Key="ScrollBar.Disabled.Background" Color="#F0F0F0" />
  108. <SolidColorBrush x:Key="ScrollBar.Disabled.Border" Color="#F0F0F0" />
  109. <SolidColorBrush x:Key="ScrollBar.Disabled.Glyph" Color="#BFBFBF" />
  110. <Style x:Key="RepeatButtonTransparent" TargetType="{x:Type RepeatButton}">
  111. <Setter Property="OverridesDefaultStyle" Value="true" />
  112. <Setter Property="Background" Value="Transparent" />
  113. <Setter Property="Focusable" Value="false" />
  114. <Setter Property="IsTabStop" Value="false" />
  115. <Setter Property="Template">
  116. <Setter.Value>
  117. <ControlTemplate TargetType="{x:Type RepeatButton}">
  118. <Rectangle
  119. Width="{TemplateBinding Width}"
  120. Height="{TemplateBinding Height}"
  121. Fill="{TemplateBinding Background}" />
  122. </ControlTemplate>
  123. </Setter.Value>
  124. </Setter>
  125. </Style>
  126. <Style x:Key="ScrollBarButton" TargetType="{x:Type RepeatButton}">
  127. <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
  128. <Setter Property="BorderThickness" Value="1" />
  129. <Setter Property="HorizontalContentAlignment" Value="Center" />
  130. <Setter Property="VerticalContentAlignment" Value="Center" />
  131. <Setter Property="Padding" Value="1" />
  132. <Setter Property="Focusable" Value="false" />
  133. <Setter Property="IsTabStop" Value="false" />
  134. <Setter Property="Template">
  135. <Setter.Value>
  136. <ControlTemplate TargetType="{x:Type RepeatButton}">
  137. <Border
  138. x:Name="border"
  139. Background="{StaticResource ScrollBar.Static.Background}"
  140. BorderBrush="{StaticResource ScrollBar.Static.Border}"
  141. BorderThickness="1"
  142. SnapsToDevicePixels="true">
  143. <ContentPresenter
  144. x:Name="contentPresenter"
  145. Margin="{TemplateBinding Padding}"
  146. HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
  147. VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
  148. Focusable="False"
  149. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  150. </Border>
  151. <ControlTemplate.Triggers>
  152. <Trigger Property="IsMouseOver" Value="true">
  153. <Setter TargetName="border" Property="Background" Value="{StaticResource ScrollBar.MouseOver.Background}" />
  154. <Setter TargetName="border" Property="BorderBrush" Value="{StaticResource ScrollBar.MouseOver.Border}" />
  155. </Trigger>
  156. <Trigger Property="IsPressed" Value="true">
  157. <Setter TargetName="border" Property="Background" Value="{StaticResource ScrollBar.Pressed.Background}" />
  158. <Setter TargetName="border" Property="BorderBrush" Value="{StaticResource ScrollBar.Pressed.Border}" />
  159. </Trigger>
  160. <Trigger Property="IsEnabled" Value="false">
  161. <Setter TargetName="contentPresenter" Property="Opacity" Value="0.56" />
  162. <Setter TargetName="border" Property="Background" Value="{StaticResource ScrollBar.Disabled.Background}" />
  163. <Setter TargetName="border" Property="BorderBrush" Value="{StaticResource ScrollBar.Disabled.Border}" />
  164. </Trigger>
  165. </ControlTemplate.Triggers>
  166. </ControlTemplate>
  167. </Setter.Value>
  168. </Setter>
  169. </Style>
  170. <Style x:Key="ScrollBarThumbVertical" TargetType="{x:Type Thumb}">
  171. <Setter Property="OverridesDefaultStyle" Value="true" />
  172. <Setter Property="IsTabStop" Value="false" />
  173. <Setter Property="Template">
  174. <Setter.Value>
  175. <ControlTemplate TargetType="{x:Type Thumb}">
  176. <Rectangle
  177. x:Name="rectangle"
  178. Width="{TemplateBinding Width}"
  179. Height="{TemplateBinding Height}"
  180. Fill="#A0ADBE"
  181. RadiusX="3"
  182. RadiusY="3"
  183. SnapsToDevicePixels="True" />
  184. <ControlTemplate.Triggers>
  185. <Trigger Property="IsMouseOver" Value="true">
  186. <Setter TargetName="rectangle" Property="Fill" Value="{StaticResource ScrollBar.MouseOver.Thumb}" />
  187. </Trigger>
  188. <Trigger Property="IsDragging" Value="true">
  189. <Setter TargetName="rectangle" Property="Fill" Value="{StaticResource ScrollBar.Pressed.Thumb}" />
  190. </Trigger>
  191. </ControlTemplate.Triggers>
  192. </ControlTemplate>
  193. </Setter.Value>
  194. </Setter>
  195. </Style>
  196. <Style x:Key="ScrollBarThumbHorizontal" TargetType="{x:Type Thumb}">
  197. <Setter Property="OverridesDefaultStyle" Value="true" />
  198. <Setter Property="IsTabStop" Value="false" />
  199. <Setter Property="Template">
  200. <Setter.Value>
  201. <ControlTemplate TargetType="{x:Type Thumb}">
  202. <Rectangle
  203. x:Name="rectangle"
  204. Width="{TemplateBinding Width}"
  205. Height="{TemplateBinding Height}"
  206. Fill="{StaticResource ScrollBar.Static.Thumb}"
  207. SnapsToDevicePixels="True" />
  208. <ControlTemplate.Triggers>
  209. <Trigger Property="IsMouseOver" Value="true">
  210. <Setter TargetName="rectangle" Property="Fill" Value="{StaticResource ScrollBar.MouseOver.Thumb}" />
  211. </Trigger>
  212. <Trigger Property="IsDragging" Value="true">
  213. <Setter TargetName="rectangle" Property="Fill" Value="{StaticResource ScrollBar.Pressed.Thumb}" />
  214. </Trigger>
  215. </ControlTemplate.Triggers>
  216. </ControlTemplate>
  217. </Setter.Value>
  218. </Setter>
  219. </Style>
  220. <Style x:Key="DefaultScrollBarStyle" TargetType="{x:Type ScrollBar}">
  221. <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false" />
  222. <Setter Property="Stylus.IsFlicksEnabled" Value="false" />
  223. <Setter Property="Background" Value="{StaticResource ScrollBar.Static.Background}" />
  224. <Setter Property="BorderBrush" Value="{StaticResource ScrollBar.Static.Border}" />
  225. <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
  226. <Setter Property="BorderThickness" Value="0" />
  227. <Setter Property="Template">
  228. <Setter.Value>
  229. <ControlTemplate TargetType="{x:Type ScrollBar}">
  230. <Grid x:Name="Bg" SnapsToDevicePixels="true">
  231. <Grid.RowDefinitions>
  232. <RowDefinition MaxHeight="{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}" />
  233. <RowDefinition Height="0.00001*" />
  234. <RowDefinition MaxHeight="{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}" />
  235. </Grid.RowDefinitions>
  236. <Border
  237. Grid.Row="1"
  238. Background="{TemplateBinding Background}"
  239. BorderBrush="{TemplateBinding BorderBrush}"
  240. BorderThickness="{TemplateBinding BorderThickness}"
  241. Visibility="Collapsed" />
  242. <RepeatButton
  243. x:Name="PART_LineUpButton"
  244. Command="{x:Static ScrollBar.LineUpCommand}"
  245. IsEnabled="{TemplateBinding IsMouseOver}"
  246. Style="{StaticResource ScrollBarButton}"
  247. Visibility="Collapsed">
  248. <Path
  249. x:Name="ArrowTop"
  250. Margin="3,4,3,3"
  251. Data="M 0,4 C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4 z"
  252. Fill="{StaticResource ScrollBar.Static.Glyph}"
  253. Stretch="Uniform" />
  254. </RepeatButton>
  255. <Track
  256. x:Name="PART_Track"
  257. Grid.Row="1"
  258. IsDirectionReversed="true"
  259. IsEnabled="{TemplateBinding IsMouseOver}">
  260. <Track.Resources>
  261. <System:Double x:Key="{x:Static SystemParameters.VerticalScrollBarButtonHeightKey}">
  262. 300
  263. </System:Double>
  264. </Track.Resources>
  265. <Track.DecreaseRepeatButton>
  266. <RepeatButton Command="{x:Static ScrollBar.PageUpCommand}" Style="{StaticResource RepeatButtonTransparent}" />
  267. </Track.DecreaseRepeatButton>
  268. <Track.IncreaseRepeatButton>
  269. <RepeatButton Command="{x:Static ScrollBar.PageDownCommand}" Style="{StaticResource RepeatButtonTransparent}" />
  270. </Track.IncreaseRepeatButton>
  271. <Track.Thumb>
  272. <Thumb Width="6" Style="{StaticResource ScrollBarThumbVertical}" />
  273. </Track.Thumb>
  274. </Track>
  275. <RepeatButton
  276. x:Name="PART_LineDownButton"
  277. Grid.Row="2"
  278. Command="{x:Static ScrollBar.LineDownCommand}"
  279. IsEnabled="{TemplateBinding IsMouseOver}"
  280. Style="{StaticResource ScrollBarButton}"
  281. Visibility="Collapsed">
  282. <Path
  283. x:Name="ArrowBottom"
  284. Margin="3,4,3,3"
  285. Data="M 0,2.5 C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5 z"
  286. Fill="{StaticResource ScrollBar.Static.Glyph}"
  287. Stretch="Uniform" />
  288. </RepeatButton>
  289. </Grid>
  290. <ControlTemplate.Triggers>
  291. <MultiDataTrigger>
  292. <MultiDataTrigger.Conditions>
  293. <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineDownButton}" Value="true" />
  294. <Condition Binding="{Binding IsPressed, ElementName=PART_LineDownButton}" Value="true" />
  295. </MultiDataTrigger.Conditions>
  296. <Setter TargetName="ArrowBottom" Property="Fill" Value="{StaticResource ScrollBar.Pressed.Glyph}" />
  297. </MultiDataTrigger>
  298. <MultiDataTrigger>
  299. <MultiDataTrigger.Conditions>
  300. <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineUpButton}" Value="true" />
  301. <Condition Binding="{Binding IsPressed, ElementName=PART_LineUpButton}" Value="true" />
  302. </MultiDataTrigger.Conditions>
  303. <Setter TargetName="ArrowTop" Property="Fill" Value="{StaticResource ScrollBar.Pressed.Glyph}" />
  304. </MultiDataTrigger>
  305. <MultiDataTrigger>
  306. <MultiDataTrigger.Conditions>
  307. <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineDownButton}" Value="true" />
  308. <Condition Binding="{Binding IsPressed, ElementName=PART_LineDownButton}" Value="false" />
  309. </MultiDataTrigger.Conditions>
  310. <Setter TargetName="ArrowBottom" Property="Fill" Value="{StaticResource ScrollBar.MouseOver.Glyph}" />
  311. </MultiDataTrigger>
  312. <MultiDataTrigger>
  313. <MultiDataTrigger.Conditions>
  314. <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineUpButton}" Value="true" />
  315. <Condition Binding="{Binding IsPressed, ElementName=PART_LineUpButton}" Value="false" />
  316. </MultiDataTrigger.Conditions>
  317. <Setter TargetName="ArrowTop" Property="Fill" Value="{StaticResource ScrollBar.MouseOver.Glyph}" />
  318. </MultiDataTrigger>
  319. <Trigger Property="IsEnabled" Value="false">
  320. <Setter TargetName="ArrowTop" Property="Fill" Value="{StaticResource ScrollBar.Disabled.Glyph}" />
  321. <Setter TargetName="ArrowBottom" Property="Fill" Value="{StaticResource ScrollBar.Disabled.Glyph}" />
  322. </Trigger>
  323. </ControlTemplate.Triggers>
  324. </ControlTemplate>
  325. </Setter.Value>
  326. </Setter>
  327. <Style.Triggers>
  328. <Trigger Property="Orientation" Value="Horizontal">
  329. <Setter Property="Width" Value="Auto" />
  330. <Setter Property="MinWidth" Value="0" />
  331. <Setter Property="Height" Value="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}" />
  332. <Setter Property="MinHeight" Value="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}" />
  333. <Setter Property="BorderThickness" Value="0,1" />
  334. <Setter Property="Template">
  335. <Setter.Value>
  336. <ControlTemplate TargetType="{x:Type ScrollBar}">
  337. <Grid x:Name="Bg" SnapsToDevicePixels="true">
  338. <Grid.ColumnDefinitions>
  339. <ColumnDefinition MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}" />
  340. <ColumnDefinition Width="0.00001*" />
  341. <ColumnDefinition MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}" />
  342. </Grid.ColumnDefinitions>
  343. <Border
  344. Grid.Column="1"
  345. Background="{TemplateBinding Background}"
  346. BorderBrush="{TemplateBinding BorderBrush}"
  347. BorderThickness="{TemplateBinding BorderThickness}" />
  348. <RepeatButton
  349. x:Name="PART_LineLeftButton"
  350. Command="{x:Static ScrollBar.LineLeftCommand}"
  351. IsEnabled="{TemplateBinding IsMouseOver}"
  352. Style="{StaticResource ScrollBarButton}">
  353. <Path
  354. x:Name="ArrowLeft"
  355. Margin="3"
  356. Data="M 3.18,7 C3.18,7 5,7 5,7 5,7 1.81,3.5 1.81,3.5 1.81,3.5 5,0 5,0 5,0 3.18,0 3.18,0 3.18,0 0,3.5 0,3.5 0,3.5 3.18,7 3.18,7 z"
  357. Fill="{StaticResource ScrollBar.Static.Glyph}"
  358. Stretch="Uniform" />
  359. </RepeatButton>
  360. <Track
  361. x:Name="PART_Track"
  362. Grid.Column="1"
  363. IsEnabled="{TemplateBinding IsMouseOver}">
  364. <Track.DecreaseRepeatButton>
  365. <RepeatButton Command="{x:Static ScrollBar.PageLeftCommand}" Style="{StaticResource RepeatButtonTransparent}" />
  366. </Track.DecreaseRepeatButton>
  367. <Track.IncreaseRepeatButton>
  368. <RepeatButton Command="{x:Static ScrollBar.PageRightCommand}" Style="{StaticResource RepeatButtonTransparent}" />
  369. </Track.IncreaseRepeatButton>
  370. <Track.Thumb>
  371. <Thumb Style="{StaticResource ScrollBarThumbHorizontal}" />
  372. </Track.Thumb>
  373. </Track>
  374. <RepeatButton
  375. x:Name="PART_LineRightButton"
  376. Grid.Column="2"
  377. Command="{x:Static ScrollBar.LineRightCommand}"
  378. IsEnabled="{TemplateBinding IsMouseOver}"
  379. Style="{StaticResource ScrollBarButton}">
  380. <Path
  381. x:Name="ArrowRight"
  382. Margin="3"
  383. Data="M 1.81,7 C1.81,7 0,7 0,7 0,7 3.18,3.5 3.18,3.5 3.18,3.5 0,0 0,0 0,0 1.81,0 1.81,0 1.81,0 5,3.5 5,3.5 5,3.5 1.81,7 1.81,7 z"
  384. Fill="{StaticResource ScrollBar.Static.Glyph}"
  385. Stretch="Uniform" />
  386. </RepeatButton>
  387. </Grid>
  388. <ControlTemplate.Triggers>
  389. <MultiDataTrigger>
  390. <MultiDataTrigger.Conditions>
  391. <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineRightButton}" Value="true" />
  392. <Condition Binding="{Binding IsPressed, ElementName=PART_LineRightButton}" Value="true" />
  393. </MultiDataTrigger.Conditions>
  394. <Setter TargetName="ArrowRight" Property="Fill" Value="{StaticResource ScrollBar.Pressed.Glyph}" />
  395. </MultiDataTrigger>
  396. <MultiDataTrigger>
  397. <MultiDataTrigger.Conditions>
  398. <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineLeftButton}" Value="true" />
  399. <Condition Binding="{Binding IsPressed, ElementName=PART_LineLeftButton}" Value="true" />
  400. </MultiDataTrigger.Conditions>
  401. <Setter TargetName="ArrowLeft" Property="Fill" Value="{StaticResource ScrollBar.Pressed.Glyph}" />
  402. </MultiDataTrigger>
  403. <MultiDataTrigger>
  404. <MultiDataTrigger.Conditions>
  405. <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineRightButton}" Value="true" />
  406. <Condition Binding="{Binding IsPressed, ElementName=PART_LineRightButton}" Value="false" />
  407. </MultiDataTrigger.Conditions>
  408. <Setter TargetName="ArrowRight" Property="Fill" Value="{StaticResource ScrollBar.MouseOver.Glyph}" />
  409. </MultiDataTrigger>
  410. <MultiDataTrigger>
  411. <MultiDataTrigger.Conditions>
  412. <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineLeftButton}" Value="true" />
  413. <Condition Binding="{Binding IsPressed, ElementName=PART_LineLeftButton}" Value="false" />
  414. </MultiDataTrigger.Conditions>
  415. <Setter TargetName="ArrowLeft" Property="Fill" Value="{StaticResource ScrollBar.MouseOver.Glyph}" />
  416. </MultiDataTrigger>
  417. <Trigger Property="IsEnabled" Value="false">
  418. <Setter TargetName="ArrowLeft" Property="Fill" Value="{StaticResource ScrollBar.Disabled.Glyph}" />
  419. <Setter TargetName="ArrowRight" Property="Fill" Value="{StaticResource ScrollBar.Disabled.Glyph}" />
  420. </Trigger>
  421. </ControlTemplate.Triggers>
  422. </ControlTemplate>
  423. </Setter.Value>
  424. </Setter>
  425. </Trigger>
  426. </Style.Triggers>
  427. </Style>
  428. <!--#endregion-->
  429. <!--#region 表格内样式-->
  430. <Style x:Key="DefaultDataGridCellStyle" TargetType="{x:Type DataGridCell}">
  431. <Setter Property="Background" Value="Transparent" />
  432. <Setter Property="Foreground" Value="{StaticResource DataGridForeground}" />
  433. <Setter Property="FontSize" Value="{StaticResource DataGridFontSize}" />
  434. <Setter Property="BorderBrush" Value="Transparent" />
  435. <Setter Property="BorderThickness" Value="1" />
  436. <Setter Property="Template">
  437. <Setter.Value>
  438. <ControlTemplate TargetType="{x:Type DataGridCell}">
  439. <Border
  440. Background="{TemplateBinding Background}"
  441. BorderBrush="{TemplateBinding BorderBrush}"
  442. BorderThickness="{TemplateBinding BorderThickness}"
  443. SnapsToDevicePixels="True">
  444. <ContentPresenter
  445. Margin="20,0,0,0"
  446. VerticalAlignment="Center"
  447. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  448. </Border>
  449. </ControlTemplate>
  450. </Setter.Value>
  451. </Setter>
  452. </Style>
  453. <Style x:Key="DefaultDataGridColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
  454. <Setter Property="Background" Value="Transparent" />
  455. <Setter Property="Foreground" Value="{StaticResource DataGridForeground}" />
  456. <Setter Property="Height" Value="68" />
  457. <Setter Property="Padding" Value="20,0,0,0" />
  458. <Setter Property="FontSize" Value="{StaticResource DataGridFontSize}" />
  459. <Setter Property="Template">
  460. <Setter.Value>
  461. <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
  462. <Grid>
  463. <theme:DataGridHeaderBorder
  464. Padding="{TemplateBinding Padding}"
  465. Background="{TemplateBinding Background}"
  466. BorderBrush="{TemplateBinding BorderBrush}"
  467. BorderThickness="{TemplateBinding BorderThickness}"
  468. IsClickable="{TemplateBinding CanUserSort}"
  469. IsHovered="{TemplateBinding IsMouseOver}"
  470. IsPressed="{TemplateBinding IsPressed}"
  471. SeparatorBrush="{TemplateBinding SeparatorBrush}"
  472. SeparatorVisibility="{TemplateBinding SeparatorVisibility}"
  473. SortDirection="{TemplateBinding SortDirection}">
  474. <ContentPresenter
  475. HorizontalAlignment="Left"
  476. VerticalAlignment="Center"
  477. RecognizesAccessKey="True"
  478. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  479. </theme:DataGridHeaderBorder>
  480. <Thumb
  481. x:Name="PART_LeftHeaderGripper"
  482. HorizontalAlignment="Left"
  483. Style="{StaticResource ColumnHeaderGripperStyle}" />
  484. <Thumb
  485. x:Name="PART_RightHeaderGripper"
  486. HorizontalAlignment="Right"
  487. Style="{StaticResource ColumnHeaderGripperStyle}" />
  488. </Grid>
  489. </ControlTemplate>
  490. </Setter.Value>
  491. </Setter>
  492. </Style>
  493. <Style x:Key="DefaultDataGridRowHeaderStyle" TargetType="{x:Type DataGridRowHeader}">
  494. <Setter Property="Template">
  495. <Setter.Value>
  496. <ControlTemplate TargetType="{x:Type DataGridRowHeader}">
  497. <Grid>
  498. <theme:DataGridHeaderBorder
  499. Padding="{TemplateBinding Padding}"
  500. Background="{TemplateBinding Background}"
  501. BorderBrush="{TemplateBinding BorderBrush}"
  502. BorderThickness="{TemplateBinding BorderThickness}"
  503. IsHovered="{TemplateBinding IsMouseOver}"
  504. IsPressed="{TemplateBinding IsPressed}"
  505. IsSelected="{TemplateBinding IsRowSelected}"
  506. Orientation="Horizontal"
  507. SeparatorBrush="{TemplateBinding SeparatorBrush}"
  508. SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
  509. <StackPanel Orientation="Horizontal">
  510. <ContentPresenter
  511. VerticalAlignment="Center"
  512. RecognizesAccessKey="True"
  513. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  514. <Control
  515. SnapsToDevicePixels="false"
  516. Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"
  517. Visibility="{Binding (Validation.HasError), Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" />
  518. </StackPanel>
  519. </theme:DataGridHeaderBorder>
  520. <Thumb
  521. x:Name="PART_TopHeaderGripper"
  522. VerticalAlignment="Top"
  523. Style="{StaticResource RowHeaderGripperStyle}" />
  524. <Thumb
  525. x:Name="PART_BottomHeaderGripper"
  526. VerticalAlignment="Bottom"
  527. Style="{StaticResource RowHeaderGripperStyle}" />
  528. </Grid>
  529. </ControlTemplate>
  530. </Setter.Value>
  531. </Setter>
  532. </Style>
  533. <Style x:Key="DefaultDataGridRowStyle" TargetType="{x:Type DataGridRow}">
  534. <Setter Property="Background" Value="Transparent" />
  535. <Setter Property="SnapsToDevicePixels" Value="true" />
  536. <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
  537. <Setter Property="ValidationErrorTemplate">
  538. <Setter.Value>
  539. <ControlTemplate>
  540. <TextBlock
  541. Margin="2,0,0,0"
  542. VerticalAlignment="Center"
  543. Foreground="Red"
  544. Text="!" />
  545. </ControlTemplate>
  546. </Setter.Value>
  547. </Setter>
  548. <Setter Property="Template">
  549. <Setter.Value>
  550. <ControlTemplate TargetType="{x:Type DataGridRow}">
  551. <Border
  552. x:Name="DGR_Border"
  553. Background="{TemplateBinding Background}"
  554. BorderBrush="{TemplateBinding BorderBrush}"
  555. BorderThickness="{TemplateBinding BorderThickness}"
  556. SnapsToDevicePixels="True">
  557. <SelectiveScrollingGrid>
  558. <SelectiveScrollingGrid.ColumnDefinitions>
  559. <ColumnDefinition Width="Auto" />
  560. <ColumnDefinition Width="*" />
  561. </SelectiveScrollingGrid.ColumnDefinitions>
  562. <SelectiveScrollingGrid.RowDefinitions>
  563. <RowDefinition Height="*" />
  564. <RowDefinition Height="Auto" />
  565. </SelectiveScrollingGrid.RowDefinitions>
  566. <DataGridCellsPresenter
  567. x:Name="dataGridCellsPresenter"
  568. Grid.Column="1"
  569. ItemsPanel="{TemplateBinding ItemsPanel}"
  570. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  571. <DataGridDetailsPresenter
  572. x:Name="dataGridDetailsPresenter"
  573. Grid.Row="1"
  574. Grid.Column="1"
  575. SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
  576. Visibility="{TemplateBinding DetailsVisibility}" />
  577. <DataGridRowHeader
  578. x:Name="dataGridRowHeader"
  579. Grid.RowSpan="2"
  580. SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"
  581. Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
  582. </SelectiveScrollingGrid>
  583. </Border>
  584. <ControlTemplate.Triggers>
  585. <Trigger Property="IsSelected" Value="True">
  586. <Setter TargetName="DGR_Border" Property="Background" Value="#edf1f5" />
  587. </Trigger>
  588. </ControlTemplate.Triggers>
  589. </ControlTemplate>
  590. </Setter.Value>
  591. </Setter>
  592. <Style.Triggers>
  593. <Trigger Property="IsNewItem" Value="True">
  594. <Setter Property="Margin" Value="{Binding NewItemMargin, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
  595. </Trigger>
  596. </Style.Triggers>
  597. </Style>
  598. <!--#endregion-->
  599. <Style x:Key="DefaultDataGridStyle" TargetType="{x:Type DataGrid}">
  600. <Setter Property="IsReadOnly" Value="True" />
  601. <Setter Property="AutoGenerateColumns" Value="False" />
  602. <Setter Property="RowHeight" Value="68" />
  603. <Setter Property="Margin" Value="32" />
  604. <Setter Property="HeadersVisibility" Value="Column" />
  605. <Setter Property="CanUserAddRows" Value="False" />
  606. <Setter Property="CanUserDeleteRows" Value="False" />
  607. <Setter Property="CanUserReorderColumns" Value="False" />
  608. <Setter Property="CanUserResizeColumns" Value="False" />
  609. <Setter Property="CanUserResizeRows" Value="False" />
  610. <Setter Property="CanUserSortColumns" Value="False" />
  611. <Setter Property="SelectionMode" Value="Single" />
  612. <Setter Property="GridLinesVisibility" Value="Horizontal" />
  613. <Setter Property="HorizontalGridLinesBrush" Value="#CAD2DD" />
  614. <Setter Property="Background" Value="White" />
  615. <Setter Property="Foreground" Value="#313F56" />
  616. <Setter Property="BorderBrush" Value="#FF688CAF" />
  617. <Setter Property="BorderThickness" Value="1" />
  618. <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected" />
  619. <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
  620. <Setter Property="CellStyle" Value="{StaticResource DefaultDataGridCellStyle}" />
  621. <Setter Property="RowStyle" Value="{StaticResource DefaultDataGridRowStyle}" />
  622. <Setter Property="RowHeaderStyle" Value="{StaticResource DefaultDataGridRowHeaderStyle}" />
  623. <Setter Property="ColumnHeaderStyle" Value="{StaticResource DefaultDataGridColumnHeaderStyle}" />
  624. <Setter Property="ScrollViewer.PanningMode" Value="VerticalOnly" />
  625. <Setter Property="Stylus.IsFlicksEnabled" Value="False" />
  626. <Setter Property="Template">
  627. <Setter.Value>
  628. <ControlTemplate TargetType="{x:Type DataGrid}">
  629. <Grid>
  630. <Border Background="White" CornerRadius="8">
  631. <Grid>
  632. <Grid.RowDefinitions>
  633. <RowDefinition Height="68" />
  634. <RowDefinition Height="*" />
  635. </Grid.RowDefinitions>
  636. <Border
  637. Background="{StaticResource DataGridBackground}"
  638. BorderBrush="#cbd0d3"
  639. BorderThickness="1"
  640. CornerRadius="8,8,0,0" />
  641. </Grid>
  642. </Border>
  643. <Border
  644. Padding="{TemplateBinding Padding}"
  645. Background="Transparent"
  646. BorderBrush="#cbd0d3"
  647. BorderThickness="1"
  648. CornerRadius="8"
  649. SnapsToDevicePixels="True">
  650. <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false">
  651. <ScrollViewer.Template>
  652. <ControlTemplate TargetType="{x:Type ScrollViewer}">
  653. <Grid>
  654. <Grid.ColumnDefinitions>
  655. <ColumnDefinition Width="Auto" />
  656. <ColumnDefinition Width="*" />
  657. <ColumnDefinition Width="Auto" />
  658. </Grid.ColumnDefinitions>
  659. <Grid.RowDefinitions>
  660. <RowDefinition Height="Auto" />
  661. <RowDefinition Height="*" />
  662. <RowDefinition Height="Auto" />
  663. </Grid.RowDefinitions>
  664. <Button
  665. Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
  666. Command="{x:Static DataGrid.SelectAllCommand}"
  667. Focusable="false"
  668. Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle,
  669. TypeInTargetAssembly={x:Type DataGrid}}}"
  670. Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
  671. <DataGridColumnHeadersPresenter
  672. x:Name="PART_ColumnHeadersPresenter"
  673. Grid.Column="1"
  674. Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
  675. <ScrollContentPresenter
  676. x:Name="PART_ScrollContentPresenter"
  677. Grid.Row="1"
  678. Grid.ColumnSpan="2"
  679. CanContentScroll="{TemplateBinding CanContentScroll}" />
  680. <ScrollBar
  681. x:Name="PART_VerticalScrollBar"
  682. Grid.Row="1"
  683. Grid.Column="1"
  684. HorizontalAlignment="Right"
  685. Maximum="{TemplateBinding ScrollableHeight}"
  686. Orientation="Vertical"
  687. Style="{StaticResource DefaultScrollBarStyle}"
  688. ViewportSize="{TemplateBinding ViewportHeight}"
  689. Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
  690. Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" />
  691. <Grid Grid.Row="2" Grid.Column="1">
  692. <Grid.ColumnDefinitions>
  693. <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
  694. <ColumnDefinition Width="*" />
  695. </Grid.ColumnDefinitions>
  696. <ScrollBar
  697. x:Name="PART_HorizontalScrollBar"
  698. Grid.Column="1"
  699. Maximum="{TemplateBinding ScrollableWidth}"
  700. Orientation="Horizontal"
  701. ViewportSize="{TemplateBinding ViewportWidth}"
  702. Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
  703. Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" />
  704. </Grid>
  705. </Grid>
  706. </ControlTemplate>
  707. </ScrollViewer.Template>
  708. <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  709. </ScrollViewer>
  710. </Border>
  711. </Grid>
  712. </ControlTemplate>
  713. </Setter.Value>
  714. </Setter>
  715. <Style.Triggers>
  716. <MultiTrigger>
  717. <MultiTrigger.Conditions>
  718. <Condition Property="IsGrouping" Value="true" />
  719. <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false" />
  720. </MultiTrigger.Conditions>
  721. <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
  722. </MultiTrigger>
  723. </Style.Triggers>
  724. </Style>
  725. </ResourceDictionary>

测试

UI界面如下

WPF --- 重写圆角DataGrid样式的更多相关文章

  1. WPF日积月累之DataGrid样式以及操作数据模板中的控件

    一.效果图 二.代码预览 1 <Window x:Class="Test.MainWindow" 2 xmlns="http://schemas.microsoft ...

  2. WPF DataGrid 样式设置

    隔行换色,鼠标单击,悬浮样式都有,其具体效果如图 1 所示. 图 1 WPF DataGrid 样式设置效果图 其中: 界面设计代码下所示 ? + 查看代码 1 2 3 4 5 6 7 8 9 10 ...

  3. WPF DataGrid 样式分享

    原文:WPF DataGrid 样式分享 隔行换色,鼠标单击,悬浮样式都有 先看效果: 代码: <DataGrid AutoGenerateColumns="False" N ...

  4. 使用 CSS 去掉 iPhone 网页上按钮的超大圆角默认样式

    使用 iPhone 上的浏览器去浏览网页的时候,按钮总是显示超大圆角的样式,显得超级恶心,但是我们自己定义 border-radius 为 0 也无法去除这个圆角,经过搜索发现这是 webikt 内核 ...

  5. WPF 中获取DataGrid 模板列中控件的对像

    WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...

  6. WPF ScrollViewer(滚动条) 自定义样式表制作 再发一套样式 细节优化

    艾尼路 出的效果图 本人嵌套 WPF ScrollViewer(滚动条) 自定义样式表制作 图文并茂 WPF ScrollViewer(滚动条) 自定义样式表制作 (改良+美化) 源代码

  7. WPF 控件DataGrid绑定

    WPF 手动绑定 DataGrid 例子:前台:<DataGrid AutoGenerateColumns="False" Name="dataGrid1" ...

  8. WPF笔记(1.9 样式和控件模板)——Hello,WPF!

    原文:WPF笔记(1.9 样式和控件模板)--Hello,WPF! 资源的另一个用途是样式设置: <Window >  <Window.Resources>    <St ...

  9. WPF 自带Datagrid编辑后无法更新数据源的问题

    原文  WPF 自带Datagrid编辑后无法更新数据源的问题 解决办法: 在列的绑定属性里加上UpdateSourceTrigger,示例XAML如下 <DataGrid Grid.Row=& ...

  10. WPF 自定义键盘焦点样式(FocusVisualStyle)

    WPF 自带的键盘焦点样式是与传统控件样式搭配的,但 WPF 凭着其强大的自定义样式的能力,做出与传统控件样式完全不同风格的 UI 简直易如反掌.这时,其自带的键盘焦点样式(FocusVisualSt ...

随机推荐

  1. Java中的基本数据类型和包装类型的这些知识,你都知道吗?

    Java中的基本数据类型和包装类型 Java 中的基本数据按类型可以分为四大类:布尔型.整数型.浮点型.字符型: 这四大类包含 8 种基本数据类型. 布尔型:boolean 整数型:byte.shor ...

  2. vim 从嫌弃到依赖(21)——跨文件搜索

    之前介绍了vim中的搜索模式,使用正则表达式可以很方便的在一个文件中进行搜索.后续也介绍了如何使用 argsdo 命令在参数列表中进行替换操作.但是到目前为止还没有介绍如何在工程目录中进行搜索,而这个 ...

  3. NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等

    NLP专栏简介:数据增强.智能标注.意图识别算法|多分类算法.文本信息抽取.多模态信息抽取.可解释性分析.性能调优.模型压缩算法等 专栏链接:NLP领域知识+项目+码源+方案设计 订阅本专栏你能获得什 ...

  4. 架构设计脱胎换骨!英特尔酷睿Ultra深度解析

    英特尔正式发布了第一代酷睿Ultra处理器平台,也就是首个基于Intel 4制程工艺(7nm)打造的移动级处理器平台,其核心代号为Meteor Lake,产品系列贴标设计也采用了全新方案. 同时在命名 ...

  5. Docker从认识到实践再到底层原理(六-2)|Docker容器操作实例

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  6. Leetcode刷题第一天-贪心

    455-分饼干 链接:455. 分发饼干 - 力扣(LeetCode) 优先使用最小饼干满足最小胃口,一个娃只能分一个饼干T_T不能加 1 class Solution: 2 def findCont ...

  7. Java并发(六)----线程start、run、state方法

    1.start 与 run 调用 run public static void main(String[] args) {    Thread t1 = new Thread("t1&quo ...

  8. .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(下)

    05 | 依赖注入:良好架构的起点 注册完毕之后,想替换某些组件的某些部分时,可以使用 Replace 和 RemoveAll services.AddSingleton<IOrderServi ...

  9. 使用mail发送邮件

    使用mail发送邮件 ​ 只做个简单介绍,使用场景不多 1.安装mail yum install mailx -y 2.配置 ​ 1)配置文件在/etc/mail.rc,有兴趣的可以仔细读一下默认的配 ...

  10. JS 前序遍历、中序遍历、后序遍历、层序遍历详解,深度优先与广度优先区别,附leetcode例题题解答案

    壹 ❀ 引 按照一天一题的速度,不知不觉已经刷了快两多月的leetcode了,因为本人较为笨拙,一道简单的题有时候也会研究很久,看着提交了两百多次,其实也才解决了70来道简单题,对于二分法,双指针等也 ...