AvaloniaDataGrid.axaml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <UserControl xmlns="https://github.com/avaloniaui"
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5. mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  6. x:Class="InABox.Avalonia.Components.AvaloniaDataGrid"
  7. xmlns:components="using:InABox.Avalonia.Components"
  8. xmlns:converters="using:InABox.Avalonia.Converters"
  9. x:DataType="components:AvaloniaDataGrid">
  10. <UserControl.Resources>
  11. <converters:DateTimeToAgeConverter x:Key="DateTimeToAgeConverter" EmptyValue="Never Updated" Prefix="Updated" />
  12. </UserControl.Resources>
  13. <Grid>
  14. <Grid.RowDefinitions>
  15. <RowDefinition Height="Auto"/>
  16. <RowDefinition Height="*"/>
  17. <RowDefinition Height="Auto"/>
  18. </Grid.RowDefinitions>
  19. <Grid.ColumnDefinitions>
  20. <ColumnDefinition Width="*"/>
  21. <ColumnDefinition Width="Auto"/>
  22. </Grid.ColumnDefinitions>
  23. <components:SearchBar Name="SearchBar" Grid.Row="0" Grid.ColumnSpan="2"
  24. PlaceholderText="Search"
  25. Command="{Binding $parent[components:AvaloniaDataGrid].SearchCommand}"
  26. Text="{Binding $parent[components:AvaloniaDataGrid].SearchText}"
  27. Background="Transparent"
  28. Margin="0,0,0,2"/>
  29. <Border Grid.Row="1" Grid.ColumnSpan="2"
  30. CornerRadius="{StaticResource PrsCornerRadius}"
  31. BorderThickness="{StaticResource PrsBorderThickness}"
  32. BorderBrush="{StaticResource PrsTileBorder}"
  33. ClipToBounds="True">
  34. <DataGrid Name="Grid" Grid.Row="1" Grid.ColumnSpan="2"
  35. ItemsSource="{Binding $parent[components:AvaloniaDataGrid].ItemsSource}"
  36. RowBackground="White"
  37. Foreground="Black"
  38. AutoGenerateColumns="False"
  39. Tapped="DataGrid_Tapped"
  40. SelectionChanged="DataGrid_SelectionChanged"
  41. RowHeight="{Binding $parent[components:AvaloniaDataGrid].RowHeight}"
  42. GridLinesVisibility="Vertical"
  43. FontSize="{StaticResource PrsFontSizeSmall}"
  44. CornerRadius="{StaticResource PrsCornerRadius}"
  45. LoadingRow="DataGrid_LoadingRow">
  46. <DataGrid.Styles>
  47. <Style Selector="DataGridRow:nth-child(even)">
  48. <Setter Property="Background" Value="WhiteSmoke"/>
  49. </Style>
  50. <Style Selector="DataGridColumnHeader">
  51. <Setter Property="FontSize" Value="{StaticResource PrsFontSizeExtraSmall}"/>
  52. <Setter Property="Padding" Value="0"/>
  53. <Setter Property="Template">
  54. <ControlTemplate>
  55. <Border x:Name="HeaderBorder"
  56. Background="{TemplateBinding Background}"
  57. BorderBrush="{TemplateBinding BorderBrush}"
  58. BorderThickness="{TemplateBinding BorderThickness}"
  59. CornerRadius="{TemplateBinding CornerRadius}">
  60. <Grid Name="PART_ColumnHeaderRoot" ColumnDefinitions="*,Auto">
  61. <Panel Margin="{TemplateBinding Padding}"
  62. HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
  63. VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
  64. <Grid>
  65. <Grid.ColumnDefinitions>
  66. <ColumnDefinition Width="*" />
  67. <ColumnDefinition Width="Auto" MinWidth="0" />
  68. </Grid.ColumnDefinitions>
  69. <ContentPresenter x:Name="PART_ContentPresenter"
  70. Content="{TemplateBinding Content}"
  71. ContentTemplate="{TemplateBinding ContentTemplate}" />
  72. <Path Name="SortIcon"
  73. IsVisible="False"
  74. Grid.Column="1"
  75. Height="12"
  76. HorizontalAlignment="Center"
  77. VerticalAlignment="Center"
  78. Fill="{TemplateBinding Foreground}"
  79. Stretch="Uniform" />
  80. </Grid>
  81. </Panel>
  82. <Rectangle Name="VerticalSeparator"
  83. Grid.Column="1"
  84. Width="1"
  85. VerticalAlignment="Stretch"
  86. Fill="{TemplateBinding SeparatorBrush}"
  87. IsVisible="{TemplateBinding AreSeparatorsVisible}" />
  88. <Grid x:Name="FocusVisual" IsHitTestVisible="False"
  89. IsVisible="False">
  90. <Rectangle x:Name="FocusVisualPrimary"
  91. HorizontalAlignment="Stretch"
  92. VerticalAlignment="Stretch"
  93. Fill="Transparent"
  94. IsHitTestVisible="False"
  95. Stroke="{DynamicResource DataGridCellFocusVisualPrimaryBrush}"
  96. StrokeThickness="2" />
  97. <Rectangle x:Name="FocusVisualSecondary"
  98. Margin="2"
  99. HorizontalAlignment="Stretch"
  100. VerticalAlignment="Stretch"
  101. Fill="Transparent"
  102. IsHitTestVisible="False"
  103. Stroke="{DynamicResource DataGridCellFocusVisualSecondaryBrush}"
  104. StrokeThickness="1" />
  105. </Grid>
  106. </Grid>
  107. </Border>
  108. </ControlTemplate>
  109. </Setter>
  110. </Style>
  111. <Style Selector="DataGridCell">
  112. <Setter Property="FontSize" Value="{StaticResource PrsFontSizeExtraSmall}"/>
  113. </Style>
  114. <Style Selector="DataGrid /template/ Border#DataGridBorder">
  115. <Setter Property="ClipToBounds" Value="True"/>
  116. </Style>
  117. </DataGrid.Styles>
  118. </DataGrid>
  119. </Border>
  120. <Border Name="_recordCountBox" Classes="Standard"
  121. Grid.Row="2"
  122. Grid.Column="0"
  123. Margin="0,2,0,0">
  124. <DockPanel>
  125. <Label Name="_recordCount" DockPanel.Dock="Right"/>
  126. <Label Name="_lastUpdated" Content="{Binding $parent[components:AvaloniaDataGrid].LastUpdated, FallbackValue={x:Null}, Converter={StaticResource DateTimeToAgeConverter}}" DockPanel.Dock="Right"/>
  127. </DockPanel>
  128. </Border>
  129. <Button Classes="Standard"
  130. Grid.Row="2"
  131. Grid.Column="1"
  132. Padding="4"
  133. Command="{Binding $parent[components:AvaloniaDataGrid].RefreshCommand}"
  134. IsVisible="{Binding $parent[components:AvaloniaDataGrid].RefreshVisible}"
  135. Margin="2,2,0,0">
  136. <Image
  137. Classes="Small">
  138. <Image.Source>
  139. <SvgImage Source="/Images/refresh.svg"/>
  140. </Image.Source>
  141. </Image>
  142. </Button>
  143. </Grid>
  144. </UserControl>