DataGrid 样式

  1     <SolidColorBrush x:Key="OutsideFontColor" Color="#FF000000" />
  2 
  3     <LinearGradientBrush x:Key="NormalBrush" EndPoint="0.5,1" StartPoint="0.5,0">
  4         <GradientStop Color="#FFFFFFFF" Offset="0" />
  5         <GradientStop Color="#FF8AAEDA" Offset="0.521" />
  6         <GradientStop Color="#FFC6D6EC" Offset="0.194" />
  7         <GradientStop Color="#FFB4C9E5" Offset="0.811" />
  8         <GradientStop Color="#FFB7C8E0" Offset="0.507" />
  9         <GradientStop Color="#FFD1DEF0" Offset="1" />
 10     </LinearGradientBrush>
 11     <LinearGradientBrush x:Key="NormalBorderBrush" EndPoint="0.5,0" StartPoint="0.5,1">
 12         <GradientStop Color="#FF84B2D4" />
 13         <GradientStop Color="#FFADC7DE" Offset="1" />
 14     </LinearGradientBrush>
 15     <SolidColorBrush x:Key="NormalHighlightBrush" Color="#FFFFFFFF"/>
 16     <LinearGradientBrush x:Key="MouseOverBrush" EndPoint="0.5,1" StartPoint="0.5,0">
 17         <GradientStop Color="#FFFFFFFF" Offset="0" />
 18         <GradientStop Color="#FFFEF3B5" Offset="0.318" />
 19         <GradientStop Color="#FFFFEB70" Offset="0.488" />
 20         <GradientStop Color="#FFFFD02E" Offset="0.502" />
 21         <GradientStop Color="#FFFFD932" Offset="0.834" />
 22         <GradientStop Color="#FFFFF48B" Offset="1" />
 23     </LinearGradientBrush>
 24     <LinearGradientBrush x:Key="MouseOverBorderBrush" EndPoint="0.5,1" StartPoint="0.5,0">
 25         <GradientStop Color="#FFEEE8CF" Offset="0" />
 26         <GradientStop Color="#FFC4AF8C" Offset="0.536" />
 27         <GradientStop Color="#FFDCD1BF" Offset="1" />
 28     </LinearGradientBrush>
 29     <LinearGradientBrush x:Key="MouseOverHighlightBrush" EndPoint="0.5,1" StartPoint="0.5,0">
 30         <GradientStop Color="#FFFFFFFB" Offset="0" />
 31         <GradientStop Color="#FFFEF3B5" Offset="1" />
 32     </LinearGradientBrush>
 33     <LinearGradientBrush x:Key="PressedBrush" EndPoint="0.5,1" StartPoint="0.5,0">
 34         <GradientStop Color="#FFC3BCAE" Offset="0" />
 35         <GradientStop Color="#FFFDCE9D" Offset="0.046" />
 36         <GradientStop Color="#FFFFA35B" Offset="0.452" />
 37         <GradientStop Color="#FFFF8A2C" Offset="0.461" />
 38         <GradientStop Color="#FFFF9F30" Offset="0.724" />
 39         <GradientStop Color="#FFFFC472" Offset="1" />
 40     </LinearGradientBrush>
 41     <LinearGradientBrush x:Key="PressedBorderBrush" EndPoint="0.5,1" StartPoint="0.5,0">
 42         <GradientStop Color="#FF8E8165" Offset="0" />
 43         <GradientStop Color="#FFC3BCAE" Offset="1" />
 44     </LinearGradientBrush>
 45     <LinearGradientBrush x:Key="PressedHighlightBrush" EndPoint="0.5,1" StartPoint="0.5,0">
 46         <GradientStop Color="#FFFFFFFF" Offset="0.665" />
 47         <GradientStop Color="#FFC3BCAE" Offset="0" />
 48     </LinearGradientBrush>
 49     <SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#A5FFFFFF"/>
 50     <SolidColorBrush x:Key="DisabledBorderBrush" Color="#66FFFFFF"/>
 51     <SolidColorBrush x:Key="FocusBrush" Color="#FFE99862"/>
 52 
 53     <LinearGradientBrush x:Key="ControlBackgroundBrush" EndPoint="1.204,0.5" StartPoint="0.056,0.5">
 54         <GradientStop Color="#FFFFFFFF" Offset="0" />
 55         <GradientStop Color="#FFD4D7DB" Offset="1" />
 56     </LinearGradientBrush>
 57     <SolidColorBrush x:Key="ControlBorderBrush" Color="#FFB1703C"/>
 58 
 59     <SolidColorBrush x:Key="GlyphBrush" Color="#FF527DB5"/>
 60 
 61 
 62     <SolidColorBrush x:Key="AlternateBackgroundBrush" Color="#FFBFDBFF"/>
 63     <SolidColorBrush x:Key="ControlContentBrush" Color="#FFE0EAF6"/>
 64 
 65 
 66     <Color x:Key="BlackColor">#FF000000</Color>
 67     <Color x:Key="WhiteColor">#FFFFFFFF</Color>
 68 
 69     <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />
 70 
 71     <SolidColorBrush x:Key="WindowBackgroundBrush" Color="#FFF" />
 72 
 73     <!--DataGrid -->
 74 
 75     <!--Style and template for the resize control on the DataGridColumnHeader.-->
 76     <Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}">
 77         <Setter Property="Width" Value="5" />
 78         <Setter Property="Background" Value="Transparent" />
 79         <Setter Property="Cursor" Value="SizeWE" />
 80         <Setter Property="Template">
 81             <Setter.Value>
 82                 <ControlTemplate TargetType="{x:Type Thumb}">
 83                     <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" />
 84                 </ControlTemplate>
 85             </Setter.Value>
 86         </Setter>
 87     </Style>
 88 
 89     <!--Style and template for the DataGridColumnHeader.-->
 90     <Style TargetType="{x:Type DataGridColumnHeader}">
 91         <Setter Property="Background" Value="{DynamicResource NormalBorderBrush}"/>
 92         <Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
 93         <Setter Property="VerticalContentAlignment" Value="Center" />
 94         <Setter Property="Height" Value="30"/>
 95         <Setter Property="SeparatorBrush" Value="#FFC9CACA" />
 96         <Setter Property="FontSize" Value="14"/>
 97         <Setter Property="FontWeight" Value="SemiBold"/>
 98         <Setter Property="Padding" Value="4 0 0 0"/>
 99         <Setter Property="Template">
100             <Setter.Value>
101                 <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
102                     <ControlTemplate.Resources>
103                         <Storyboard x:Key="HoverOn">
104                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Hover" Storyboard.TargetProperty="(UIElement.Opacity)">
105                                 <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/>
106                             </DoubleAnimationUsingKeyFrames>
107                         </Storyboard>
108                         <Storyboard x:Key="HoverOff">
109                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Hover" Storyboard.TargetProperty="(UIElement.Opacity)">
110                                 <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
111                             </DoubleAnimationUsingKeyFrames>
112                         </Storyboard>
113                     </ControlTemplate.Resources>
114                     <Grid Background='Transparent' >
115                         <Grid.ColumnDefinitions>
116                             <ColumnDefinition Width='Auto' />
117                             <ColumnDefinition Width='Auto' />
118                             <ColumnDefinition Width='*' />
119                             <ColumnDefinition Width='Auto' />
120                         </Grid.ColumnDefinitions>
121                         <Rectangle x:Name="BackgroundRectangle" Grid.ColumnSpan="4" Grid.RowSpan="2"
122                                    Fill="{StaticResource NormalBrush}" Stretch="Fill" Stroke="{StaticResource NormalBorderBrush}" StrokeThickness="1" />
123                         <Rectangle x:Name="Hover" Grid.ColumnSpan="4" Grid.RowSpan="2" Stretch="Fill" 
124                                    Fill="{StaticResource MouseOverBrush}" Opacity="0" />
125                         <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
126                                                   VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
127                                                   HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
128                                                   Margin='{TemplateBinding Padding}'
129                                                   Cursor="{TemplateBinding Cursor}"/>
130                         <Path HorizontalAlignment="Left" x:Name="SortArrow" VerticalAlignment="Center" 
131                                       Width="8" Opacity="0" RenderTransformOrigin=".5,.5" Grid.Column="2" Grid.RowSpan="2" Fill="#FF000000" Stretch="Uniform" Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z ">
132                             <Path.RenderTransform>
133                                 <TransformGroup>
134                                     <ScaleTransform ScaleX=".9" ScaleY=".9" x:Name="SortIconTransform" />
135                                 </TransformGroup>
136                             </Path.RenderTransform>
137                         </Path>
138                         <Thumb x:Name="PART_LeftHeaderGripper" Grid.Column="0" HorizontalAlignment="Left" Style="{StaticResource ColumnHeaderGripperStyle}"/>
139                         <Thumb x:Name="PART_RightHeaderGripper" Grid.Column="3" HorizontalAlignment="Right" Style="{StaticResource ColumnHeaderGripperStyle}"/>
140                     </Grid>
141                     <ControlTemplate.Triggers>
142                         <Trigger Property="SortDirection" Value="Ascending">
143                             <Setter TargetName="SortArrow" Property="Opacity" Value="1" />
144                             <Setter TargetName="SortArrow" Property="RenderTransform">
145                                 <Setter.Value>
146                                     <RotateTransform Angle="180" />
147                                 </Setter.Value>
148                             </Setter>
149                             <Setter TargetName="BackgroundRectangle" Property="Opacity" Value="1" />
150                         </Trigger>
151                         <Trigger Property="SortDirection" Value="Descending">
152                             <Setter TargetName="SortArrow" Property="Opacity" Value="1" />
153                             <Setter TargetName="BackgroundRectangle" Property="Opacity" Value="1" />
154                         </Trigger>
155                         <Trigger Property="IsMouseOver" Value="true">
156                             <Trigger.EnterActions>
157                                 <BeginStoryboard Storyboard="{StaticResource HoverOn}"/>
158                             </Trigger.EnterActions>
159                             <Trigger.ExitActions>
160                                 <BeginStoryboard Storyboard="{StaticResource HoverOff}"/>
161                             </Trigger.ExitActions>
162                         </Trigger>
163                     </ControlTemplate.Triggers>
164                 </ControlTemplate>
165             </Setter.Value>
166         </Setter>        
167     </Style>
168 
169     <!--Style and template for the DataGridColumnHeadersPresenter.-->
170     <Style TargetType="{x:Type DataGridColumnHeadersPresenter}">
171         <Setter Property="Template">
172             <Setter.Value>
173                 <ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
174                     <Grid>
175                         <DataGridColumnHeader x:Name="PART_FillerColumnHeader" IsHitTestVisible="False" />
176                         <ItemsPresenter />
177                     </Grid>
178                 </ControlTemplate>
179             </Setter.Value>
180         </Setter>
181     </Style>
182 
183     <Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}" TargetType="{x:Type Button}">
184         <Setter Property="Template">
185             <Setter.Value>
186                 <ControlTemplate TargetType="{x:Type Button}">
187                     <Grid>
188                         <Rectangle x:Name="Border" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" SnapsToDevicePixels="True"/>
189                         <Polygon x:Name="Arrow" Fill="Black" HorizontalAlignment="Right" Margin="8,8,3,3" Opacity="0.15" Points="0,10 10,10 10,0" Stretch="Uniform" VerticalAlignment="Bottom"/>
190                     </Grid>
191                     <ControlTemplate.Triggers>
192                         <Trigger Property="IsMouseOver" Value="True">
193                             <Setter Property="Stroke" TargetName="Border" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
194                         </Trigger>
195                         <Trigger Property="IsPressed" Value="True">
196                             <Setter Property="Fill" TargetName="Border" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
197                         </Trigger>
198                         <Trigger Property="IsEnabled" Value="False">
199                             <Setter Property="Visibility" TargetName="Arrow" Value="Collapsed"/>
200                         </Trigger>
201                     </ControlTemplate.Triggers>
202                 </ControlTemplate>
203             </Setter.Value>
204         </Setter>
205     </Style>
206 
207     <Style TargetType="{x:Type DataGrid}">
208         <Setter Property="Background" Value="{StaticResource ControlContentBrush}"/>
209         <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected"/>
210         <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
211         <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
212         <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
213         <Setter Property="Margin" Value="5"/>
214         <Setter Property="BorderBrush" Value="{StaticResource NormalBorderBrush}" />
215         <Setter Property="AlternatingRowBackground" Value="{StaticResource AlternateBackgroundBrush}"/>
216         <Setter Property="HorizontalGridLinesBrush" Value="{StaticResource NormalBorderBrush}"/>
217         <Setter Property="VerticalGridLinesBrush" Value="{StaticResource NormalBorderBrush}"/>
218         <Setter Property="Template">
219             <Setter.Value>
220                 <ControlTemplate TargetType="{x:Type DataGrid}">
221                     <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="2" CornerRadius="5" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
222                         <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false">
223                             <ScrollViewer.Template>
224                                 <ControlTemplate TargetType="{x:Type ScrollViewer}">
225                                     <Grid>
226                                         <Grid.ColumnDefinitions>
227                                             <ColumnDefinition Width="Auto"/>
228                                             <ColumnDefinition Width="*"/>
229                                             <ColumnDefinition Width="Auto"/>
230                                         </Grid.ColumnDefinitions>
231                                         <Grid.RowDefinitions>
232                                             <RowDefinition Height="Auto"/>
233                                             <RowDefinition Height="*"/>
234                                             <RowDefinition Height="Auto"/>
235                                         </Grid.RowDefinitions>
236                                         <Button Command="{x:Static DataGrid.SelectAllCommand}" Focusable="false" Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
237                                         <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Grid.Column="1" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
238                                         <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" Grid.ColumnSpan="2" Grid.Row="1"/>
239                                         <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical" Grid.Row="1" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
240                                         <Grid Grid.Column="1" Grid.Row="2">
241                                             <Grid.ColumnDefinitions>
242                                                 <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
243                                                 <ColumnDefinition Width="*"/>
244                                             </Grid.ColumnDefinitions>
245                                             <ScrollBar x:Name="PART_HorizontalScrollBar" Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
246                                         </Grid>
247                                     </Grid>
248                                 </ControlTemplate>
249                             </ScrollViewer.Template>
250                             <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
251                         </ScrollViewer>
252                     </Border>
253                 </ControlTemplate>
254             </Setter.Value>
255         </Setter>
256         <Style.Triggers>
257             <Trigger Property="IsGrouping" Value="true">
258                 <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
259             </Trigger>
260         </Style.Triggers>
261     </Style>
262 
263     <Style TargetType="{x:Type DataGridRow}">
264         <Setter Property="SnapsToDevicePixels" Value="true"/>
265         <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
266         <Setter Property="ValidationErrorTemplate">
267             <Setter.Value>
268                 <ControlTemplate>
269                     <Grid>
270                         <Ellipse Width="12" Height="12" Margin="0 2 0 0"
271                         Fill="Red" Stroke="Black" VerticalAlignment="Top"
272                         StrokeThickness="0.5"/>
273                         <TextBlock FontWeight="Bold" Padding="4,0,0,0"
274                         VerticalAlignment="Top" Foreground="White" Text="!"
275                         ToolTip="{Binding (Validation.Errors)[0].ErrorContent, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}}"/>
276                     </Grid>
277                 </ControlTemplate>
278             </Setter.Value>
279         </Setter>
280 
281         <Setter Property="Template">
282             <Setter.Value>
283                 <ControlTemplate TargetType="{x:Type DataGridRow}">
284                     <ControlTemplate.Resources>
285                         <Storyboard x:Key="SelectedOn">
286                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="select_gradient" Storyboard.TargetProperty="(UIElement.Opacity)">
287                                 <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="1" />
288                             </DoubleAnimationUsingKeyFrames>
289                         </Storyboard>
290                         <Storyboard x:Key="SelectedOff">
291                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="select_gradient" Storyboard.TargetProperty="(UIElement.Opacity)">
292                                 <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
293                             </DoubleAnimationUsingKeyFrames>
294                         </Storyboard>
295                         <Storyboard x:Key="HoverOn">
296                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="hover_gradient" Storyboard.TargetProperty="(UIElement.Opacity)">
297                                 <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="0.85" />
298                             </DoubleAnimationUsingKeyFrames>
299                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="highlight" Storyboard.TargetProperty="(UIElement.Opacity)">
300                                 <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="0.65" />
301                             </DoubleAnimationUsingKeyFrames>
302                         </Storyboard>
303                         <Storyboard x:Key="HoverOff">
304                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="hover_gradient" Storyboard.TargetProperty="(UIElement.Opacity)">
305                                 <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
306                             </DoubleAnimationUsingKeyFrames>
307                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="highlight" Storyboard.TargetProperty="(UIElement.Opacity)">
308                                 <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
309                             </DoubleAnimationUsingKeyFrames>
310                         </Storyboard>
311                     </ControlTemplate.Resources>
312                     <Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
313                         <SelectiveScrollingGrid>
314                             <SelectiveScrollingGrid.ColumnDefinitions>
315                                 <ColumnDefinition Width="Auto"/>
316                                 <ColumnDefinition Width="*"/>
317                             </SelectiveScrollingGrid.ColumnDefinitions>
318                             <SelectiveScrollingGrid.RowDefinitions>
319                                 <RowDefinition Height="*"/>
320                                 <RowDefinition Height="Auto"/>
321                             </SelectiveScrollingGrid.RowDefinitions>
322 
323                             <Rectangle x:Name="hover_gradient" Stroke="{DynamicResource FocusBrush}" StrokeThickness="1" RadiusX="1" RadiusY="1" Opacity="0" IsHitTestVisible="False" Grid.Column="1" Fill="{DynamicResource MouseOverBrush}"/>
324                             <Rectangle x:Name="highlight" Margin="1" StrokeThickness="1" RadiusX="0.5" RadiusY="0.5" Opacity="0" IsHitTestVisible="False" Grid.Column="1" Stroke="{DynamicResource MouseOverHighlightBrush}" Fill="{DynamicResource MouseOverHighlightBrush}"/>
325                             <Rectangle x:Name="select_gradient" Grid.Row="0" Grid.ColumnSpan="2" StrokeThickness="1" RadiusX="1" RadiusY="1" Opacity="0" IsHitTestVisible="False" Fill="{DynamicResource PressedBrush}" Stroke="{DynamicResource PressedBorderBrush}"/>
326 
327                             <DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
328                             <DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/>
329                             <DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
330 
331                         </SelectiveScrollingGrid>
332                     </Border>
333                     <ControlTemplate.Triggers>
334                         <Trigger Property="IsMouseOver" Value="True" SourceName="DGR_Border">
335                             <Trigger.ExitActions>
336                                 <BeginStoryboard Storyboard="{StaticResource HoverOff}" x:Name="HoverOff_BeginStoryboard" />
337                             </Trigger.ExitActions>
338                             <Trigger.EnterActions>
339                                 <BeginStoryboard Storyboard="{StaticResource HoverOn}" x:Name="HoverOn_BeginStoryboard" />
340                             </Trigger.EnterActions>
341                         </Trigger>
342                         <Trigger Property="IsSelected" Value="true">
343                             <Trigger.ExitActions>
344                                 <BeginStoryboard x:Name="SelectedOff_BeginStoryboard" Storyboard="{StaticResource SelectedOff}" />
345                             </Trigger.ExitActions>
346                             <Trigger.EnterActions>
347                                 <BeginStoryboard Storyboard="{StaticResource SelectedOn}" />
348                             </Trigger.EnterActions>
349                         </Trigger>
350                     </ControlTemplate.Triggers>
351                 </ControlTemplate>
352             </Setter.Value>
353         </Setter>
354     </Style>
355 
356     <Style TargetType="{x:Type DataGridCell}">
357         <Setter Property="Template">
358             <Setter.Value>
359                 <ControlTemplate TargetType="{x:Type DataGridCell}">
360                     <ControlTemplate.Resources>
361                         <Storyboard x:Key="SelectedOn">
362                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="select_gradient" Storyboard.TargetProperty="(UIElement.Opacity)">
363                                 <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="1" />
364                             </DoubleAnimationUsingKeyFrames>
365                         </Storyboard>
366                         <Storyboard x:Key="SelectedOff">
367                             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="select_gradient" Storyboard.TargetProperty="(UIElement.Opacity)">
368                                 <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
369                             </DoubleAnimationUsingKeyFrames>
370                         </Storyboard>
371                     </ControlTemplate.Resources>
372                     <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
373                         <Grid>
374                             <Rectangle x:Name="select_gradient" Margin="-2 -1 -2 -1"  Grid.Column="1" StrokeThickness="1" RadiusX="1" RadiusY="1" Opacity="0" IsHitTestVisible="False" Fill="{DynamicResource PressedBrush}" Stroke="{DynamicResource PressedBorderBrush}"/>
375                             <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
376                         </Grid>
377                     </Border>
378                     <ControlTemplate.Triggers>
379                         <Trigger Property="IsSelected" Value="true">
380                             <Trigger.ExitActions>
381                                 <BeginStoryboard x:Name="SelectedOff_BeginStoryboard" Storyboard="{StaticResource SelectedOff}" />
382                             </Trigger.ExitActions>
383                             <Trigger.EnterActions>
384                                 <BeginStoryboard Storyboard="{StaticResource SelectedOn}" />
385                             </Trigger.EnterActions>
386                         </Trigger>
387                     </ControlTemplate.Triggers>
388                 </ControlTemplate>
389 
390             </Setter.Value>
391         </Setter>
392     </Style>
393     <BooleanToVisibilityConverter x:Key="bool2VisibilityConverter"/>
394     <Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}">
395         <Setter Property="Height" Value="8"/>
396         <Setter Property="Background" Value="Transparent"/>
397         <Setter Property="Cursor" Value="SizeNS"/>
398         <Setter Property="Template">
399             <Setter.Value>
400                 <ControlTemplate TargetType="{x:Type Thumb}">
401                     <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/>
402                 </ControlTemplate>
403             </Setter.Value>
404         </Setter>
405     </Style>
406 
407     <Style TargetType="{x:Type DataGridRowHeader}">
408         <Setter Property="Width" Value="20"/>
409         <Setter Property="Template">
410             <Setter.Value>
411                 <ControlTemplate TargetType="{x:Type DataGridRowHeader}">
412                     <Grid>
413                         <Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" IsSelected="{TemplateBinding IsRowSelected}" Orientation="Horizontal" Padding="{TemplateBinding Padding}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
414                             <StackPanel Orientation="Horizontal">
415                                 <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
416                                 <Control SnapsToDevicePixels="false" Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Visibility="{Binding (Validation.HasError), Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/>
417                             </StackPanel>
418                         </Microsoft_Windows_Themes:DataGridHeaderBorder>
419                         <Thumb x:Name="PART_TopHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Top"/>
420                         <Thumb x:Name="PART_BottomHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Bottom"/>
421                     </Grid>
422                 </ControlTemplate>
423             </Setter.Value>
424         </Setter>
425     </Style>
原文地址:https://www.cnblogs.com/xuxiaorong/p/3271579.html