AvaloniaModuleGrid.axaml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. xmlns:components="clr-namespace:InABox.Avalonia.Components"
  6. xmlns:converters="clr-namespace:InABox.Avalonia.Converters;assembly=InABox.Avalonia"
  7. xmlns:moduleGrid="clr-namespace:InABox.Avalonia.Components.ModuleGrid"
  8. mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  9. x:Class="InABox.Avalonia.Components.ModuleGrid.AvaloniaModuleGrid"
  10. x:DataType="moduleGrid:AvaloniaModuleGrid">
  11. <UserControl.Resources>
  12. <converters:StringToColorConverter
  13. x:Key="ModuleAlertColorConverter"
  14. Color="{StaticResource PrsAlertBackground}"
  15. Empty="{StaticResource PrsTileBackground}" />
  16. <converters:DoubleToCornerRadiusConverter
  17. x:Key="SphericalBorder"
  18. Ratio="0.5" />
  19. <converters:DoubleToThicknessConverter
  20. x:Key="MarginInverter"
  21. Ratio="-1.0" />
  22. <converters:DoubleToThicknessConverter
  23. x:Key="MarginDoubler"
  24. Ratio="2.0" />
  25. <moduleGrid:AvaloniaModuleGridPanelTemplate
  26. x:Key="ToolGridTemplate"
  27. ItemsPerLine="4" />
  28. <DataTemplate
  29. x:Key="ToolGrid"
  30. x:DataType="components:AvaloniaModule">
  31. <Button Classes="Standard"
  32. Height="100"
  33. Padding="0"
  34. Margin="{StaticResource PrsControlSpacing}"
  35. HorizontalContentAlignment="Stretch"
  36. VerticalContentAlignment="Stretch"
  37. Background="{Binding Alert, Converter={StaticResource ModuleAlertColorConverter}}"
  38. BorderBrush="{StaticResource PrsTileBorder}"
  39. CornerRadius="{StaticResource PrsCornerRadius}"
  40. IsEnabled="{Binding IsEnabled}"
  41. IsVisible="{Binding IsVisible}"
  42. Command="{Binding TapCommand}">
  43. <Grid>
  44. <Grid.RowDefinitions>
  45. <RowDefinition Height="*" />
  46. <RowDefinition Height="Auto" />
  47. </Grid.RowDefinitions>
  48. <Image Classes="Large"
  49. Grid.Row="0"
  50. Grid.Column="0"
  51. Source="{Binding Image}"
  52. HorizontalAlignment="Center"
  53. VerticalAlignment="Center" />
  54. <Label
  55. Grid.Row="1"
  56. Grid.Column="0"
  57. HorizontalContentAlignment="Center"
  58. FontSize="{StaticResource PrsFontSizeSmall}"
  59. FontWeight="{StaticResource PrsFontWeightBold}"
  60. Content="{Binding Title}" />
  61. <!-- -->
  62. <Border
  63. x:Name="Alert"
  64. Background="{StaticResource PrsTileBackground}"
  65. BorderBrush="{StaticResource PrsTileBorder}"
  66. Grid.Row="0"
  67. Grid.RowSpan="2"
  68. VerticalAlignment="Top"
  69. HorizontalAlignment="Right"
  70. Margin="{Binding Converter={StaticResource MarginDoubler}, ConverterParameter={StaticResource PrsControlSpacing}}"
  71. IsVisible="{Binding Alert, Converter={StaticResource StringToBooleanConverter}}"
  72. MinWidth="{Binding $self.Bounds.Height}"
  73. CornerRadius="{Binding $self.Bounds.Height, Converter={StaticResource SphericalBorder}}">
  74. <Label
  75. FontSize="{StaticResource PrsFontSizeExtraSmall}"
  76. Foreground="{StaticResource PrsTileForeground}"
  77. HorizontalContentAlignment="Center"
  78. Content="{Binding Alert}" />
  79. </Border>
  80. </Grid>
  81. </Button>
  82. </DataTemplate>
  83. </UserControl.Resources>
  84. <ItemsControl
  85. DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType = moduleGrid:AvaloniaModuleGrid}}"
  86. ItemsSource="{Binding Modules.VisibleItems}"
  87. ItemTemplate="{StaticResource ToolGrid}"
  88. ItemsPanel="{StaticResource ToolGridTemplate}"
  89. Margin="{Binding Converter={StaticResource MarginInverter}, ConverterParameter={StaticResource PrsControlSpacing}}" />
  90. </UserControl>