ListPage.xaml
  1  <?xml version="1.0" encoding="utf-8" ?>
  2  <Page
  3      x:Class="Microsoft.CmdPal.UI.ListPage"
  4      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  5      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  6      xmlns:cmdpalUI="using:Microsoft.CmdPal.UI"
  7      xmlns:controls="using:CommunityToolkit.WinUI.Controls"
  8      xmlns:coreViewModels="using:Microsoft.CmdPal.Core.ViewModels"
  9      xmlns:cpcontrols="using:Microsoft.CmdPal.UI.Controls"
 10      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 11      xmlns:help="using:Microsoft.CmdPal.UI.Helpers"
 12      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 13      x:Name="PageRoot"
 14      Background="Transparent"
 15      DataContext="{x:Bind ViewModel, Mode=OneWay}"
 16      mc:Ignorable="d">
 17  
 18      <Page.Resources>
 19  
 20          <!--
 21              GridViewItemCornerRadius is the corner radius defined in GridView template; make
 22              it bigger to match the radii of the gallery
 23          -->
 24          <CornerRadius x:Key="GalleryGridViewItemContainerCornerRadius">6</CornerRadius>
 25          <CornerRadius x:Key="IconGridViewItemContainerCornerRadius">4</CornerRadius>
 26          <CornerRadius x:Key="GalleryGridViewItemRadius">4</CornerRadius>
 27          <CornerRadius x:Key="SmallGridViewItemCornerRadius">8</CornerRadius>
 28          <CornerRadius x:Key="MediumGridViewItemCornerRadius">8</CornerRadius>
 29  
 30          <x:Double x:Key="SmallGridSize">32</x:Double>
 31          <x:Double x:Key="MediumGridSize">48</x:Double>
 32          <x:Double x:Key="MediumGridContainerSize">100</x:Double>
 33          <x:Double x:Key="GalleryGridSize">160</x:Double>
 34  
 35          <x:Double x:Key="ListViewItemMinHeight">40</x:Double>
 36          <x:Double x:Key="ListViewSectionMinHeight">0</x:Double>
 37          <x:Double x:Key="ListViewSeparatorMinHeight">0</x:Double>
 38  
 39          <Style x:Key="IconGridViewItemStyle" TargetType="GridViewItem">
 40              <Setter Property="HorizontalContentAlignment" Value="Stretch" />
 41              <Setter Property="VerticalContentAlignment" Value="Center" />
 42              <Setter Property="Template">
 43                  <Setter.Value>
 44                      <ControlTemplate TargetType="GridViewItem">
 45                          <ListViewItemPresenter
 46                              x:Name="Root"
 47                              HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
 48                              VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
 49                              CheckBoxBorderBrush="{ThemeResource GridViewItemCheckBoxBorderBrush}"
 50                              CheckBoxBrush="{ThemeResource GridViewItemCheckBoxBrush}"
 51                              CheckBoxCornerRadius="{ThemeResource GridViewItemCheckBoxCornerRadius}"
 52                              CheckBoxDisabledBorderBrush="{ThemeResource GridViewItemCheckBoxDisabledBorderBrush}"
 53                              CheckBoxDisabledBrush="{ThemeResource GridViewItemCheckBoxDisabledBrush}"
 54                              CheckBoxPointerOverBorderBrush="{ThemeResource GridViewItemCheckBoxPointerOverBorderBrush}"
 55                              CheckBoxPointerOverBrush="{ThemeResource GridViewItemCheckBoxPointerOverBrush}"
 56                              CheckBoxPressedBorderBrush="{ThemeResource GridViewItemCheckBoxPressedBorderBrush}"
 57                              CheckBoxPressedBrush="{ThemeResource GridViewItemCheckBoxPressedBrush}"
 58                              CheckBoxSelectedBrush="{ThemeResource GridViewItemCheckBoxSelectedBrush}"
 59                              CheckBoxSelectedDisabledBrush="{ThemeResource GridViewItemCheckBoxSelectedDisabledBrush}"
 60                              CheckBoxSelectedPointerOverBrush="{ThemeResource GridViewItemCheckBoxSelectedPointerOverBrush}"
 61                              CheckBoxSelectedPressedBrush="{ThemeResource GridViewItemCheckBoxSelectedPressedBrush}"
 62                              CheckBrush="{ThemeResource GridViewItemCheckBrush}"
 63                              CheckDisabledBrush="{ThemeResource GridViewItemCheckDisabledBrush}"
 64                              CheckMode="{ThemeResource GridViewItemCheckMode}"
 65                              CheckPressedBrush="{ThemeResource GridViewItemCheckPressedBrush}"
 66                              ContentMargin="{TemplateBinding Padding}"
 67                              ContentTransitions="{TemplateBinding ContentTransitions}"
 68                              Control.IsTemplateFocusTarget="True"
 69                              CornerRadius="{StaticResource IconGridViewItemContainerCornerRadius}"
 70                              DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}"
 71                              DragBackground="{ThemeResource GridViewItemDragBackground}"
 72                              DragForeground="{ThemeResource GridViewItemDragForeground}"
 73                              DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}"
 74                              FocusBorderBrush="{ThemeResource GridViewItemFocusBorderBrush}"
 75                              FocusVisualMargin="{TemplateBinding FocusVisualMargin}"
 76                              FocusVisualPrimaryBrush="{TemplateBinding FocusVisualPrimaryBrush}"
 77                              FocusVisualPrimaryThickness="{TemplateBinding FocusVisualPrimaryThickness}"
 78                              FocusVisualSecondaryBrush="{TemplateBinding FocusVisualSecondaryBrush}"
 79                              FocusVisualSecondaryThickness="{TemplateBinding FocusVisualSecondaryThickness}"
 80                              PlaceholderBackground="{ThemeResource GridViewItemPlaceholderBackground}"
 81                              PointerOverBackground="{ThemeResource GridViewItemBackgroundPointerOver}"
 82                              PointerOverBorderBrush="{ThemeResource GridViewItemPointerOverBorderBrush}"
 83                              PointerOverForeground="{ThemeResource GridViewItemForegroundPointerOver}"
 84                              PressedBackground="{ThemeResource GridViewItemBackgroundPressed}"
 85                              ReorderHintOffset="{ThemeResource GridViewItemReorderHintThemeOffset}"
 86                              SelectedBackground="{ThemeResource GridViewItemBackgroundSelected}"
 87                              SelectedBorderBrush="{ThemeResource GridViewItemSelectedBorderBrush}"
 88                              SelectedBorderThickness="{ThemeResource GridViewItemSelectedBorderThickness}"
 89                              SelectedDisabledBackground="{ThemeResource GridViewItemBackgroundSelectedDisabled}"
 90                              SelectedDisabledBorderBrush="{ThemeResource GridViewItemSelectedDisabledBorderBrush}"
 91                              SelectedForeground="{ThemeResource GridViewItemForegroundSelected}"
 92                              SelectedInnerBorderBrush="{ThemeResource GridViewItemSelectedInnerBorderBrush}"
 93                              SelectedPointerOverBackground="{ThemeResource GridViewItemBackgroundSelectedPointerOver}"
 94                              SelectedPointerOverBorderBrush="{ThemeResource GridViewItemSelectedPointerOverBorderBrush}"
 95                              SelectedPressedBackground="{ThemeResource GridViewItemBackgroundSelectedPressed}"
 96                              SelectedPressedBorderBrush="{ThemeResource GridViewItemSelectedPressedBorderBrush}"
 97                              SelectionCheckMarkVisualEnabled="{ThemeResource GridViewItemSelectionCheckMarkVisualEnabled}" />
 98                      </ControlTemplate>
 99                  </Setter.Value>
100              </Setter>
101          </Style>
102  
103          <Style x:Key="GalleryGridViewItemStyle" TargetType="GridViewItem">
104              <Setter Property="HorizontalContentAlignment" Value="Stretch" />
105              <Setter Property="VerticalContentAlignment" Value="Center" />
106              <Setter Property="Margin" Value="0" />
107              <Setter Property="Template">
108                  <Setter.Value>
109                      <ControlTemplate TargetType="GridViewItem">
110                          <ListViewItemPresenter
111                              x:Name="Root"
112                              HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
113                              VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
114                              CheckBoxBorderBrush="{ThemeResource GridViewItemCheckBoxBorderBrush}"
115                              CheckBoxBrush="{ThemeResource GridViewItemCheckBoxBrush}"
116                              CheckBoxCornerRadius="{ThemeResource GridViewItemCheckBoxCornerRadius}"
117                              CheckBoxDisabledBorderBrush="{ThemeResource GridViewItemCheckBoxDisabledBorderBrush}"
118                              CheckBoxDisabledBrush="{ThemeResource GridViewItemCheckBoxDisabledBrush}"
119                              CheckBoxPointerOverBorderBrush="{ThemeResource GridViewItemCheckBoxPointerOverBorderBrush}"
120                              CheckBoxPointerOverBrush="{ThemeResource GridViewItemCheckBoxPointerOverBrush}"
121                              CheckBoxPressedBorderBrush="{ThemeResource GridViewItemCheckBoxPressedBorderBrush}"
122                              CheckBoxPressedBrush="{ThemeResource GridViewItemCheckBoxPressedBrush}"
123                              CheckBoxSelectedBrush="{ThemeResource GridViewItemCheckBoxSelectedBrush}"
124                              CheckBoxSelectedDisabledBrush="{ThemeResource GridViewItemCheckBoxSelectedDisabledBrush}"
125                              CheckBoxSelectedPointerOverBrush="{ThemeResource GridViewItemCheckBoxSelectedPointerOverBrush}"
126                              CheckBoxSelectedPressedBrush="{ThemeResource GridViewItemCheckBoxSelectedPressedBrush}"
127                              CheckBrush="{ThemeResource GridViewItemCheckBrush}"
128                              CheckDisabledBrush="{ThemeResource GridViewItemCheckDisabledBrush}"
129                              CheckMode="{ThemeResource GridViewItemCheckMode}"
130                              CheckPressedBrush="{ThemeResource GridViewItemCheckPressedBrush}"
131                              ContentMargin="{TemplateBinding Padding}"
132                              ContentTransitions="{TemplateBinding ContentTransitions}"
133                              Control.IsTemplateFocusTarget="True"
134                              CornerRadius="{StaticResource GalleryGridViewItemContainerCornerRadius}"
135                              DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}"
136                              DragBackground="{ThemeResource GridViewItemDragBackground}"
137                              DragForeground="{ThemeResource GridViewItemDragForeground}"
138                              DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}"
139                              FocusBorderBrush="{ThemeResource GridViewItemFocusBorderBrush}"
140                              FocusVisualMargin="{TemplateBinding FocusVisualMargin}"
141                              FocusVisualPrimaryBrush="{TemplateBinding FocusVisualPrimaryBrush}"
142                              FocusVisualPrimaryThickness="{TemplateBinding FocusVisualPrimaryThickness}"
143                              FocusVisualSecondaryBrush="{TemplateBinding FocusVisualSecondaryBrush}"
144                              FocusVisualSecondaryThickness="{TemplateBinding FocusVisualSecondaryThickness}"
145                              PlaceholderBackground="{ThemeResource GridViewItemPlaceholderBackground}"
146                              PointerOverBackground="{ThemeResource GridViewItemBackgroundPointerOver}"
147                              PointerOverBorderBrush="{ThemeResource GridViewItemPointerOverBorderBrush}"
148                              PointerOverForeground="{ThemeResource GridViewItemForegroundPointerOver}"
149                              PressedBackground="{ThemeResource GridViewItemBackgroundPressed}"
150                              ReorderHintOffset="{ThemeResource GridViewItemReorderHintThemeOffset}"
151                              SelectedBackground="{ThemeResource GridViewItemBackgroundSelected}"
152                              SelectedBorderBrush="{ThemeResource GridViewItemSelectedBorderBrush}"
153                              SelectedBorderThickness="{ThemeResource GridViewItemSelectedBorderThickness}"
154                              SelectedDisabledBackground="{ThemeResource GridViewItemBackgroundSelectedDisabled}"
155                              SelectedDisabledBorderBrush="{ThemeResource GridViewItemSelectedDisabledBorderBrush}"
156                              SelectedForeground="{ThemeResource GridViewItemForegroundSelected}"
157                              SelectedInnerBorderBrush="{ThemeResource GridViewItemSelectedInnerBorderBrush}"
158                              SelectedPointerOverBackground="{ThemeResource GridViewItemBackgroundSelectedPointerOver}"
159                              SelectedPointerOverBorderBrush="{ThemeResource GridViewItemSelectedPointerOverBorderBrush}"
160                              SelectedPressedBackground="{ThemeResource GridViewItemBackgroundSelectedPressed}"
161                              SelectedPressedBorderBrush="{ThemeResource GridViewItemSelectedPressedBorderBrush}"
162                              SelectionCheckMarkVisualEnabled="{ThemeResource GridViewItemSelectionCheckMarkVisualEnabled}" />
163                      </ControlTemplate>
164                  </Setter.Value>
165              </Setter>
166          </Style>
167  
168          <Style
169              x:Key="GridViewSectionItemStyle"
170              BasedOn="{StaticResource DefaultGridViewItemStyle}"
171              TargetType="GridViewItem">
172              <Setter Property="IsHitTestVisible" Value="False" />
173              <Setter Property="IsTabStop" Value="False" />
174              <Setter Property="IsHoldingEnabled" Value="False" />
175              <Setter Property="Padding" Value="4,8,12,0" />
176              <Setter Property="Margin" Value="0" />
177              <Setter Property="HorizontalContentAlignment" Value="Stretch" />
178              <Setter Property="VerticalContentAlignment" Value="Bottom" />
179              <Setter Property="MinHeight" Value="{StaticResource ListViewSectionMinHeight}" />
180              <Setter Property="cpcontrols:WrapPanel.IsFullLine" Value="True" />
181          </Style>
182  
183          <Style
184              x:Key="GridViewSeparatorItemStyle"
185              BasedOn="{StaticResource DefaultGridViewItemStyle}"
186              TargetType="GridViewItem">
187              <Setter Property="IsHitTestVisible" Value="False" />
188              <Setter Property="IsTabStop" Value="False" />
189              <Setter Property="IsHoldingEnabled" Value="False" />
190              <Setter Property="Padding" Value="4,4,12,4" />
191              <Setter Property="Margin" Value="0" />
192              <Setter Property="HorizontalContentAlignment" Value="Stretch" />
193              <Setter Property="VerticalContentAlignment" Value="Center" />
194              <Setter Property="MinHeight" Value="{StaticResource ListViewSeparatorMinHeight}" />
195              <Setter Property="cpcontrols:WrapPanel.IsFullLine" Value="True" />
196          </Style>
197  
198          <Style
199              x:Key="ListDefaultContainerStyle"
200              BasedOn="{StaticResource DefaultListViewItemStyle}"
201              TargetType="ListViewItem">
202              <Setter Property="MinHeight" Value="{StaticResource ListViewItemMinHeight}" />
203          </Style>
204  
205          <Style
206              x:Key="ListSectionContainerStyle"
207              BasedOn="{StaticResource DefaultListViewItemStyle}"
208              TargetType="ListViewItem">
209              <Setter Property="IsHitTestVisible" Value="False" />
210              <Setter Property="IsTabStop" Value="False" />
211              <Setter Property="IsHoldingEnabled" Value="False" />
212              <Setter Property="Padding" Value="16,8,12,0" />
213              <Setter Property="HorizontalContentAlignment" Value="Stretch" />
214              <Setter Property="VerticalContentAlignment" Value="Bottom" />
215              <Setter Property="MinHeight" Value="{StaticResource ListViewSectionMinHeight}" />
216              <Setter Property="AllowDrop" Value="False" />
217          </Style>
218  
219          <Style
220              x:Key="ListSeparatorContainerStyle"
221              BasedOn="{StaticResource DefaultListViewItemStyle}"
222              TargetType="ListViewItem">
223              <Setter Property="IsHitTestVisible" Value="False" />
224              <Setter Property="IsTabStop" Value="False" />
225              <Setter Property="IsHoldingEnabled" Value="False" />
226              <Setter Property="Padding" Value="16,4,12,4" />
227              <Setter Property="HorizontalContentAlignment" Value="Stretch" />
228              <Setter Property="VerticalContentAlignment" Value="Center" />
229              <Setter Property="MinHeight" Value="{StaticResource ListViewSeparatorMinHeight}" />
230          </Style>
231  
232          <DataTemplate x:Key="TagTemplate" x:DataType="coreViewModels:TagViewModel">
233              <cpcontrols:Tag
234                  AutomationProperties.Name="{x:Bind Text, Mode=OneWay}"
235                  BackgroundColor="{x:Bind Background, Mode=OneWay}"
236                  FontSize="12"
237                  ForegroundColor="{x:Bind Foreground, Mode=OneWay}"
238                  Icon="{x:Bind Icon, Mode=OneWay}"
239                  Text="{x:Bind Text, Mode=OneWay}"
240                  ToolTipService.ToolTip="{x:Bind ToolTip, Mode=OneWay}" />
241          </DataTemplate>
242  
243          <cmdpalUI:ListItemTemplateSelector
244              x:Key="ListItemTemplateSelector"
245              x:DataType="coreViewModels:ListItemViewModel"
246              ListItem="{StaticResource ListItemViewModelTemplate}"
247              Section="{StaticResource ListSectionViewModelTemplate}"
248              Separator="{StaticResource ListSeparatorViewModelTemplate}" />
249  
250          <cmdpalUI:ListItemContainerStyleSelector
251              x:Key="ListItemContainerStyleSelector"
252              Default="{StaticResource ListDefaultContainerStyle}"
253              Section="{StaticResource ListSectionContainerStyle}"
254              Separator="{StaticResource ListSeparatorContainerStyle}" />
255  
256          <cmdpalUI:GridItemTemplateSelector
257              x:Key="GridItemTemplateSelector"
258              x:DataType="coreViewModels:ListItemViewModel"
259              Gallery="{StaticResource GalleryGridItemViewModelTemplate}"
260              GridProperties="{x:Bind ViewModel.GridProperties, Mode=OneWay}"
261              Medium="{StaticResource MediumGridItemViewModelTemplate}"
262              Section="{StaticResource ListSectionViewModelTemplate}"
263              Separator="{StaticResource GridSeparatorViewModelTemplate}"
264              Small="{StaticResource SmallGridItemViewModelTemplate}" />
265  
266          <cmdpalUI:GridItemContainerStyleSelector
267              x:Key="GridItemContainerStyleSelector"
268              Gallery="{StaticResource GalleryGridViewItemStyle}"
269              GridProperties="{x:Bind ViewModel.GridProperties, Mode=OneWay}"
270              Medium="{StaticResource IconGridViewItemStyle}"
271              Section="{StaticResource GridViewSectionItemStyle}"
272              Separator="{StaticResource GridViewSeparatorItemStyle}"
273              Small="{StaticResource IconGridViewItemStyle}" />
274  
275          <!--  https://learn.microsoft.com/windows/apps/design/controls/itemsview#specify-the-look-of-the-items  -->
276          <DataTemplate x:Key="ListItemViewModelTemplate" x:DataType="coreViewModels:ListItemViewModel">
277              <Grid
278                  Padding="0,12,0,12"
279                  AutomationProperties.Name="{x:Bind Title, Mode=OneWay}"
280                  ColumnSpacing="12">
281                  <Grid.ColumnDefinitions>
282                      <ColumnDefinition Width="28" />
283                      <ColumnDefinition Width="*" />
284                      <ColumnDefinition Width="Auto" />
285                  </Grid.ColumnDefinitions>
286  
287                  <cpcontrols:IconBox
288                      x:Name="IconBorder"
289                      Grid.Column="0"
290                      Width="20"
291                      Height="20"
292                      Margin="4,0,4,0"
293                      AutomationProperties.AccessibilityView="Raw"
294                      Foreground="{ThemeResource TextFillColorSecondaryBrush}"
295                      SourceKey="{x:Bind Icon, Mode=OneWay}"
296                      SourceRequested="{x:Bind help:IconCacheProvider.SourceRequested20}" />
297  
298                  <StackPanel
299                      Grid.Column="1"
300                      VerticalAlignment="Center"
301                      Orientation="Vertical"
302                      Spacing="1">
303                      <TextBlock
304                          VerticalAlignment="Center"
305                          CharacterSpacing="12"
306                          FontSize="14"
307                          Text="{x:Bind Title, Mode=OneWay}"
308                          TextTrimming="CharacterEllipsis"
309                          TextWrapping="NoWrap" />
310                      <TextBlock
311                          VerticalAlignment="Center"
312                          Foreground="{ThemeResource TextFillColorSecondaryBrush}"
313                          Style="{StaticResource CaptionTextBlockStyle}"
314                          Text="{x:Bind Subtitle, Mode=OneWay}"
315                          TextTrimming="CharacterEllipsis"
316                          TextWrapping="NoWrap"
317                          Visibility="{x:Bind ShowSubtitle, Mode=OneWay}" />
318                  </StackPanel>
319  
320                  <ItemsControl
321                      Grid.RowSpan="2"
322                      Grid.Column="2"
323                      Margin="0,0,8,0"
324                      VerticalAlignment="Center"
325                      IsHitTestVisible="False"
326                      IsTabStop="False"
327                      ItemTemplate="{StaticResource TagTemplate}"
328                      ItemsSource="{x:Bind Tags, Mode=OneWay}"
329                      Visibility="{x:Bind HasTags, Mode=OneWay}">
330                      <ItemsControl.ItemsPanel>
331                          <ItemsPanelTemplate>
332                              <StackPanel Orientation="Horizontal" Spacing="4" />
333                          </ItemsPanelTemplate>
334                      </ItemsControl.ItemsPanel>
335                  </ItemsControl>
336              </Grid>
337          </DataTemplate>
338  
339          <DataTemplate x:Key="ListSeparatorViewModelTemplate" x:DataType="coreViewModels:ListItemViewModel">
340              <Grid ColumnSpacing="12">
341                  <Grid.ColumnDefinitions>
342                      <ColumnDefinition Width="28" />
343                      <ColumnDefinition Width="*" />
344                  </Grid.ColumnDefinitions>
345                  <Rectangle
346                      Grid.Column="1"
347                      Height="1"
348                      Fill="{ThemeResource DividerStrokeColorDefaultBrush}" />
349              </Grid>
350          </DataTemplate>
351  
352          <DataTemplate x:Key="ListSectionViewModelTemplate" x:DataType="coreViewModels:ListItemViewModel">
353              <Grid
354                  Margin="0,8,0,0"
355                  VerticalAlignment="Center"
356                  cpcontrols:WrapPanel.IsFullLine="True"
357                  ColumnSpacing="8"
358                  IsTabStop="False"
359                  IsTapEnabled="True">
360                  <Grid.ColumnDefinitions>
361                      <ColumnDefinition Width="Auto" />
362                      <ColumnDefinition Width="*" />
363                  </Grid.ColumnDefinitions>
364                  <TextBlock
365                      Grid.Column="0"
366                      Foreground="{ThemeResource TextFillColorSecondaryBrush}"
367                      Style="{ThemeResource CaptionTextBlockStyle}"
368                      Text="{x:Bind Section}" />
369              </Grid>
370          </DataTemplate>
371  
372          <!--  Grid item templates for visual grid representation  -->
373          <DataTemplate x:Key="SmallGridItemViewModelTemplate" x:DataType="coreViewModels:ListItemViewModel">
374              <StackPanel
375                  HorizontalAlignment="Center"
376                  VerticalAlignment="Center"
377                  AutomationProperties.Name="{x:Bind Title, Mode=OneWay}"
378                  BorderThickness="0"
379                  CornerRadius="{StaticResource SmallGridViewItemCornerRadius}"
380                  Orientation="Vertical"
381                  ToolTipService.ToolTip="{x:Bind Title, Mode=OneWay}">
382  
383                  <cpcontrols:IconBox
384                      x:Name="GridIconBorder"
385                      Width="{StaticResource SmallGridSize}"
386                      Height="{StaticResource SmallGridSize}"
387                      Margin="0"
388                      HorizontalAlignment="Center"
389                      VerticalAlignment="Center"
390                      Foreground="{ThemeResource TextFillColorPrimary}"
391                      SourceKey="{x:Bind Icon, Mode=OneWay}"
392                      SourceRequested="{x:Bind help:IconCacheProvider.SourceRequested32}" />
393              </StackPanel>
394          </DataTemplate>
395  
396          <DataTemplate x:Key="MediumGridItemViewModelTemplate" x:DataType="coreViewModels:ListItemViewModel">
397              <Grid
398                  Width="{StaticResource MediumGridContainerSize}"
399                  Height="{StaticResource MediumGridContainerSize}"
400                  Padding="8"
401                  AutomationProperties.Name="{x:Bind Title, Mode=OneWay}"
402                  CornerRadius="{StaticResource MediumGridViewItemCornerRadius}"
403                  ToolTipService.ToolTip="{x:Bind Title, Mode=OneWay}">
404                  <Grid.RowDefinitions>
405                      <RowDefinition Height="*" />
406                      <RowDefinition Height="Auto" />
407                  </Grid.RowDefinitions>
408                  <cpcontrols:IconBox
409                      x:Name="GridIconBorder"
410                      Grid.Row="0"
411                      Width="{StaticResource MediumGridSize}"
412                      Height="{StaticResource MediumGridSize}"
413                      HorizontalAlignment="Center"
414                      VerticalAlignment="Center"
415                      CharacterSpacing="12"
416                      FontSize="14"
417                      Foreground="{ThemeResource TextFillColorPrimary}"
418                      SourceKey="{x:Bind Icon, Mode=OneWay}"
419                      SourceRequested="{x:Bind help:IconCacheProvider.SourceRequested64}" />
420                  <TextBlock
421                      x:Name="TitleTextBlock"
422                      Grid.Row="1"
423                      Height="32"
424                      Margin="0,8,0,0"
425                      HorizontalAlignment="Center"
426                      CharacterSpacing="12"
427                      FontSize="12"
428                      Text="{x:Bind Title, Mode=OneWay}"
429                      TextAlignment="Center"
430                      TextTrimming="WordEllipsis"
431                      TextWrapping="Wrap"
432                      Visibility="{x:Bind LayoutShowsTitle, Mode=OneWay}" />
433              </Grid>
434          </DataTemplate>
435  
436          <DataTemplate x:Key="GalleryGridItemViewModelTemplate" x:DataType="coreViewModels:ListItemViewModel">
437              <StackPanel
438                  Width="{StaticResource GalleryGridSize}"
439                  Margin="4"
440                  Padding="0"
441                  HorizontalAlignment="Center"
442                  VerticalAlignment="Center"
443                  AutomationProperties.Name="{x:Bind Title, Mode=OneWay}"
444                  BorderThickness="0"
445                  CornerRadius="{StaticResource GalleryGridViewItemRadius}"
446                  Orientation="Vertical"
447                  ToolTipService.ToolTip="{x:Bind Title, Mode=OneWay}">
448  
449                  <Grid
450                      Width="{StaticResource GalleryGridSize}"
451                      Height="{StaticResource GalleryGridSize}"
452                      Margin="0"
453                      HorizontalAlignment="Center"
454                      VerticalAlignment="Center"
455                      CornerRadius="{StaticResource GalleryGridViewItemRadius}">
456                      <Viewbox
457                          HorizontalAlignment="Center"
458                          Stretch="UniformToFill"
459                          StretchDirection="Both">
460                          <cpcontrols:IconBox
461                              CornerRadius="4"
462                              Foreground="{ThemeResource TextFillColorPrimary}"
463                              SourceKey="{x:Bind Icon, Mode=OneWay}"
464                              SourceRequested="{x:Bind help:IconCacheProvider.SourceRequested256}" />
465                      </Viewbox>
466                  </Grid>
467  
468                  <StackPanel
469                      Padding="4"
470                      Orientation="Vertical"
471                      Spacing="4"
472                      Visibility="{x:Bind help:BindTransformers.VisibleWhenAny(ShowTitle, ShowSubtitle)}">
473                      <TextBlock
474                          x:Name="TitleTextBlock"
475                          MaxWidth="152"
476                          MaxHeight="40"
477                          HorizontalAlignment="Left"
478                          VerticalAlignment="Center"
479                          CharacterSpacing="12"
480                          FontSize="14"
481                          Foreground="{ThemeResource TextFillColorPrimary}"
482                          Text="{x:Bind Title, Mode=OneWay}"
483                          TextAlignment="Center"
484                          TextTrimming="WordEllipsis"
485                          TextWrapping="NoWrap"
486                          Visibility="{x:Bind ShowTitle, Mode=OneWay}" />
487                      <TextBlock
488                          x:Name="SubTitleTextBlock"
489                          MaxWidth="152"
490                          MaxHeight="40"
491                          HorizontalAlignment="Left"
492                          VerticalAlignment="Center"
493                          CharacterSpacing="11"
494                          FontSize="11"
495                          Foreground="{ThemeResource TextFillColorSecondaryBrush}"
496                          Text="{x:Bind Subtitle, Mode=OneWay}"
497                          TextAlignment="Center"
498                          TextTrimming="WordEllipsis"
499                          TextWrapping="NoWrap"
500                          Visibility="{x:Bind ShowSubtitle, Mode=OneWay}" />
501                  </StackPanel>
502              </StackPanel>
503          </DataTemplate>
504  
505          <DataTemplate x:Key="GridSeparatorViewModelTemplate" x:DataType="coreViewModels:ListItemViewModel">
506              <Rectangle Height="1" Fill="{ThemeResource DividerStrokeColorDefaultBrush}" />
507          </DataTemplate>
508      </Page.Resources>
509  
510      <Grid>
511          <controls:SwitchPresenter
512              HorizontalAlignment="Stretch"
513              TargetType="x:Boolean"
514              Value="{x:Bind ViewModel.ShowEmptyContent, Mode=OneWay}">
515              <controls:Case Value="False">
516                  <controls:SwitchPresenter
517                      HorizontalAlignment="Stretch"
518                      TargetType="x:Boolean"
519                      Value="{x:Bind ViewModel.IsGridView, Mode=OneWay}">
520                      <controls:Case Value="False">
521                          <ListView
522                              x:Name="ItemsList"
523                              Padding="0,2,0,0"
524                              CanDragItems="True"
525                              ContextCanceled="Items_OnContextCanceled"
526                              ContextRequested="Items_OnContextRequested"
527                              DoubleTapped="Items_DoubleTapped"
528                              DragItemsCompleted="Items_DragItemsCompleted"
529                              DragItemsStarting="Items_DragItemsStarting"
530                              IsDoubleTapEnabled="True"
531                              IsItemClickEnabled="True"
532                              ItemClick="Items_ItemClick"
533                              ItemContainerStyleSelector="{StaticResource ListItemContainerStyleSelector}"
534                              ItemTemplateSelector="{StaticResource ListItemTemplateSelector}"
535                              ItemsSource="{x:Bind ViewModel.FilteredItems, Mode=OneWay}"
536                              RightTapped="Items_RightTapped"
537                              SelectionChanged="Items_SelectionChanged">
538                              <ListView.ItemContainerTransitions>
539                                  <TransitionCollection />
540                              </ListView.ItemContainerTransitions>
541                          </ListView>
542                      </controls:Case>
543                      <controls:Case Value="True">
544                          <GridView
545                              x:Name="ItemsGrid"
546                              Padding="16,16"
547                              CanDragItems="True"
548                              ContextCanceled="Items_OnContextCanceled"
549                              ContextRequested="Items_OnContextRequested"
550                              DoubleTapped="Items_DoubleTapped"
551                              DragItemsCompleted="Items_DragItemsCompleted"
552                              DragItemsStarting="Items_DragItemsStarting"
553                              IsDoubleTapEnabled="True"
554                              IsItemClickEnabled="True"
555                              ItemClick="Items_ItemClick"
556                              ItemContainerStyleSelector="{StaticResource GridItemContainerStyleSelector}"
557                              ItemTemplateSelector="{StaticResource GridItemTemplateSelector}"
558                              ItemsSource="{x:Bind ViewModel.FilteredItems, Mode=OneWay}"
559                              RightTapped="Items_RightTapped"
560                              SelectionChanged="Items_SelectionChanged">
561                              <GridView.ItemsPanel>
562                                  <ItemsPanelTemplate>
563                                      <cpcontrols:WrapPanel
564                                          HorizontalSpacing="8"
565                                          Orientation="Horizontal"
566                                          VerticalSpacing="8" />
567                                  </ItemsPanelTemplate>
568                              </GridView.ItemsPanel>
569                              <GridView.ItemContainerTransitions>
570                                  <TransitionCollection />
571                              </GridView.ItemContainerTransitions>
572                          </GridView>
573                      </controls:Case>
574                  </controls:SwitchPresenter>
575              </controls:Case>
576              <controls:Case Value="True">
577                  <StackPanel
578                      Margin="24"
579                      HorizontalAlignment="Center"
580                      VerticalAlignment="Center"
581                      Orientation="Vertical"
582                      Spacing="4">
583                      <cpcontrols:IconBox
584                          x:Name="IconBorder"
585                          Width="48"
586                          Height="48"
587                          Margin="8"
588                          Foreground="{ThemeResource TextFillColorSecondaryBrush}"
589                          SourceKey="{x:Bind ViewModel.EmptyContent.Icon, Mode=OneWay}"
590                          SourceRequested="{x:Bind help:IconCacheProvider.SourceRequested64}" />
591                      <TextBlock
592                          Margin="0,4,0,0"
593                          HorizontalAlignment="Center"
594                          FontWeight="SemiBold"
595                          Text="{x:Bind ViewModel.EmptyContent.Title, Mode=OneWay}"
596                          TextAlignment="Center"
597                          TextWrapping="Wrap" />
598                      <TextBlock
599                          HorizontalAlignment="Center"
600                          Foreground="{ThemeResource TextFillColorSecondaryBrush}"
601                          Text="{x:Bind ViewModel.EmptyContent.Subtitle, Mode=OneWay}"
602                          TextAlignment="Center"
603                          TextWrapping="Wrap" />
604                  </StackPanel>
605              </controls:Case>
606          </controls:SwitchPresenter>
607      </Grid>
608  </Page>