/ src / modules / cmdpal / Microsoft.CmdPal.UI / Controls / FiltersDropDown.xaml
FiltersDropDown.xaml
 1  <?xml version="1.0" encoding="utf-8" ?>
 2  <UserControl
 3      x:Class="Microsoft.CmdPal.UI.Controls.FiltersDropDown"
 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:converters="using:CommunityToolkit.WinUI.Converters"
 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      Background="Transparent"
14      mc:Ignorable="d">
15  
16      <UserControl.Resources>
17          <ResourceDictionary>
18              <converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
19  
20              <cmdpalUI:FilterTemplateSelector
21                  x:Key="FilterTemplateSelector"
22                  Default="{StaticResource FilterItemViewModelTemplate}"
23                  Separator="{StaticResource SeparatorViewModelTemplate}" />
24  
25              <Style
26                  x:Name="ComboBoxStyle"
27                  BasedOn="{StaticResource DefaultComboBoxStyle}"
28                  TargetType="ComboBox">
29                  <Style.Setters>
30                      <Setter Property="Visibility" Value="Collapsed" />
31                      <Setter Property="Margin" Value="0,0,12,0" />
32                      <Setter Property="Padding" Value="16,4" />
33                  </Style.Setters>
34              </Style>
35  
36              <!--  Template for the filter items  -->
37              <DataTemplate x:Key="FilterItemViewModelTemplate" x:DataType="coreViewModels:FilterItemViewModel">
38                  <Grid AutomationProperties.Name="{x:Bind Name, Mode=OneWay}">
39                      <Grid.ColumnDefinitions>
40                          <ColumnDefinition Width="32" />
41                          <ColumnDefinition Width="*" />
42                      </Grid.ColumnDefinitions>
43                      <cpcontrols:IconBox
44                          Width="16"
45                          Margin="4,0"
46                          HorizontalAlignment="Left"
47                          VerticalAlignment="Center"
48                          SourceKey="{x:Bind Icon}"
49                          SourceRequested="{x:Bind help:IconCacheProvider.SourceRequested20}" />
50                      <TextBlock
51                          Grid.Column="1"
52                          VerticalAlignment="Center"
53                          Text="{x:Bind Name}" />
54                  </Grid>
55              </DataTemplate>
56  
57              <!--  Template for separators  -->
58              <DataTemplate x:Key="SeparatorViewModelTemplate" x:DataType="coreViewModels:SeparatorViewModel">
59                  <Rectangle
60                      Height="1"
61                      Margin="-16,-12,-12,-12"
62                      Fill="{ThemeResource MenuFlyoutSeparatorBackground}" />
63              </DataTemplate>
64  
65          </ResourceDictionary>
66      </UserControl.Resources>
67  
68      <ComboBox
69          Name="FiltersComboBox"
70          x:Uid="FiltersComboBox"
71          MinWidth="200"
72          VerticalAlignment="Center"
73          ItemTemplateSelector="{StaticResource FilterTemplateSelector}"
74          ItemsSource="{x:Bind ViewModel.Filters, Mode=OneWay}"
75          PlaceholderText="Filters"
76          PreviewKeyDown="FiltersComboBox_PreviewKeyDown"
77          SelectedValue="{x:Bind ViewModel.CurrentFilter, Mode=OneWay}"
78          SelectionChanged="FiltersComboBox_SelectionChanged"
79          Style="{StaticResource ComboBoxStyle}"
80          Visibility="{x:Bind ViewModel.ShouldShowFilters, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Collapsed}">
81          <ComboBox.ItemContainerStyle>
82              <Style BasedOn="{StaticResource DefaultComboBoxItemStyle}" TargetType="ComboBoxItem">
83                  <Setter Property="MinHeight" Value="0" />
84                  <Setter Property="Padding" Value="12,8" />
85              </Style>
86          </ComboBox.ItemContainerStyle>
87          <ComboBox.ItemContainerTransitions>
88              <TransitionCollection />
89          </ComboBox.ItemContainerTransitions>
90      </ComboBox>
91  </UserControl>