Compare commits

...

6 Commits

Author SHA1 Message Date
Niels Laute
ec5d11493e Updates 2025-06-19 14:33:41 +02:00
Niels Laute
193abd44c0 Adding allmodules list 2025-06-11 15:15:13 +02:00
Niels Laute
7020ea7f10 Merge branch 'main' into niels9001/ux-explorations 2025-06-11 14:52:15 +02:00
Niels Laute
04af4e575f Update ShellPage.xaml.cs 2025-06-04 18:05:30 +02:00
Niels Laute
e5bcc00612 Adding search 2025-06-04 17:09:45 +02:00
Niels Laute
5983f46293 Revamped dashboard 2025-06-04 16:08:15 +02:00
10 changed files with 1646 additions and 202 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -22,6 +22,8 @@
<ItemGroup>
<None Remove="Assets\Settings\Modules\APDialog.dark.png" />
<None Remove="Assets\Settings\Modules\APDialog.light.png" />
<None Remove="Assets\Settings\Modules\CmdPalHero.png" />
<None Remove="SettingsXAML\Views\SearchPage.xaml" />
</ItemGroup>
<ItemGroup>
<Page Remove="SettingsXAML\App.xaml" />
@@ -132,6 +134,9 @@
<None Update="Assets\Settings\Scripts\DisableModule.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Page Update="SettingsXAML\Views\SearchPage.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>

View File

@@ -69,31 +69,26 @@
</DataTemplate>
<DataTemplate x:Key="ModuleItemButtonTemplate" x:DataType="viewmodels:DashboardModuleButtonItem">
<Button
HorizontalAlignment="Stretch"
<HyperlinkButton
Click="{x:Bind ButtonClickHandler, Mode=OneWay}"
Content="{x:Bind ButtonTitle}" />
Content="{x:Bind ButtonTitle}"
FontSize="12" />
</DataTemplate>
<DataTemplate x:Key="ModuleItemShortcutTemplate" x:DataType="viewmodels:DashboardModuleShortcutItem">
<Grid ColumnSpacing="12">
<Grid ColumnSpacing="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border
Padding="8,4"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource ControlCornerRadius}">
<Border>
<ItemsControl
AutomationProperties.AccessibilityView="Raw"
IsTabStop="False"
ItemsSource="{x:Bind Shortcut, Mode=TwoWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Spacing="12" />
<StackPanel Orientation="Horizontal" Spacing="4" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
@@ -102,13 +97,14 @@
VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw"
Content="{Binding}"
FontWeight="SemiBold"
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
IsTabStop="False"
VisualType="TextOnly" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<TextBlock
Grid.Column="1"
VerticalAlignment="Center"
@@ -281,6 +277,14 @@
</Button.Flyout>
</Button>
</DataTemplate>
<Style
x:Key="CustomFlyoutPresenterStyle"
BasedOn="{StaticResource DefaultFlyoutPresenterStyle}"
TargetType="FlyoutPresenter">
<Setter Property="MinWidth" Value="486" />
<Setter Property="Padding" Value="0" />
</Style>
</Page.Resources>
<Grid Margin="16,0,0,0" RowSpacing="24">
<Grid.RowDefinitions>
@@ -289,10 +293,15 @@
</Grid.RowDefinitions>
<TextBlock
x:Uid="DashboardTitle"
MaxWidth="1000"
Margin="24,0,0,0"
VerticalAlignment="Center"
Style="{StaticResource TitleTextBlockStyle}" />
<InfoBar
<!--<InfoBar
x:Uid="UpdateAvailable"
Margin="0,0,16,0"
HorizontalAlignment="Right"
@@ -302,204 +311,373 @@
IsOpen="{x:Bind ViewModel.UpdateAvailable, Mode=OneWay}"
Severity="Informational">
<InfoBar.ActionButton>
<Button x:Uid="LearnMore" Click="SWVersionButtonClicked" />
<Button x:Uid="LearnMore" />
</InfoBar.ActionButton>
</InfoBar>
</InfoBar>-->
<ScrollViewer x:Name="MainScrollViewer" Grid.Row="1">
<StackPanel Padding="0,0,16,16" Orientation="Vertical">
<TextBlock
x:Uid="EnabledModules"
Margin="0,0,0,12"
Style="{StaticResource SubtitleTextBlockStyle}" />
<ItemsRepeater x:Name="DashboardView" ItemsSource="{x:Bind ViewModel.ActiveModules, Mode=OneWay}">
<ItemsRepeater.Layout>
<tkcontrols:StaggeredLayout
ColumnSpacing="8"
DesiredColumnWidth="378"
RowSpacing="8" />
</ItemsRepeater.Layout>
<ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="viewmodels:DashboardListItem">
<Button
Padding="0"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
AutomationProperties.Name="{x:Bind Label}"
Background="Transparent"
BorderThickness="0"
Click="DashboardListItemClick"
CornerRadius="{StaticResource OverlayCornerRadius}"
Tag="{x:Bind Tag, Mode=OneWay}">
<Grid
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource OverlayCornerRadius}"
RowSpacing="0">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid Margin="16,8,16,0" ColumnSpacing="12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image
Grid.Column="0"
Width="20"
Margin="0,0,0,0">
<Image.Source>
<BitmapImage UriSource="{x:Bind Icon, Mode=OneWay}" />
</Image.Source>
</Image>
<StackPanel
Grid.Column="1"
VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
FontWeight="SemiBold"
Text="{x:Bind Label, Mode=OneWay}"
TextTrimming="CharacterEllipsis" />
<InfoBadge
Margin="4,0,0,0"
Style="{StaticResource NewInfoBadge}"
Visibility="{x:Bind IsNew, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}" />
</StackPanel>
<FontIcon
Grid.Column="2"
Width="20"
Margin="0,0,-12,0"
FontSize="16"
Glyph="&#xE72E;"
Visibility="{x:Bind IsLocked, Converter={StaticResource BoolToInvertedVisibilityConverter}, ConverterParameter=True, Mode=OneWay}">
<ToolTipService.ToolTip>
<TextBlock x:Uid="GPO_SettingIsManaged_ToolTip" TextWrapping="WrapWholeWords" />
</ToolTipService.ToolTip>
</FontIcon>
<ToggleSwitch
x:Uid="Enable_Module"
Grid.Column="3"
Margin="0,-2,0,0"
HorizontalAlignment="Right"
AutomationProperties.HelpText="{x:Bind Label}"
IsEnabled="{x:Bind IsLocked, Converter={StaticResource BoolNegationConverter}, ConverterParameter=True, Mode=OneWay}"
IsOn="{x:Bind IsEnabled, Mode=TwoWay}"
OffContent=""
OnContent=""
Style="{StaticResource RightAlignedCompactToggleSwitchStyle}" />
</Grid>
<ScrollViewer
x:Name="MainScrollViewer"
Grid.Row="1"
HorizontalAlignment="Stretch">
<Grid>
<Grid
MaxWidth="1000"
Padding="12,0"
RowSpacing="16">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ItemsControl
Grid.Row="1"
Margin="16,8,16,16"
IsTabStop="False"
ItemTemplateSelector="{StaticResource ModuleItemTemplateSelector}"
ItemsSource="{x:Bind DashboardModuleItems, Mode=OneWay}"
Visibility="{x:Bind IsEnabled, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Spacing="4" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
<Grid ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid ColumnSpacing="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border
Width="156"
Height="86"
CornerRadius="8">
<Border.Background>
<ImageBrush ImageSource="/Assets/Settings/Modules/CmdPalHero.png" />
</Border.Background>
</Border>
<Button Grid.Column="1" Style="{StaticResource SubtleButtonStyle}">
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBlock FontWeight="SemiBold" Text="Command Palette is here!" />
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Style="{StaticResource CaptionTextBlockStyle}"
Text="Learn what's new in 0.90" />
</StackPanel>
</Button>
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
</Grid>
<TextBlock
x:Uid="DisabledModules"
Margin="0,24,0,12"
Style="{StaticResource SubtitleTextBlockStyle}" />
<Button Grid.Column="1" Style="{StaticResource SubtleButtonStyle}">
<Grid ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<FontIcon
FontSize="20"
Foreground="{ThemeResource SystemFillColorCriticalBrush}"
Glyph="&#xE814;" />
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBlock FontWeight="SemiBold" Text="2 shortcut conflicts" />
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Style="{StaticResource CaptionTextBlockStyle}"
Text="Shortcuts conflict with system" />
</StackPanel>
</Grid>
<Button.Flyout>
<Flyout FlyoutPresenterStyle="{StaticResource CustomFlyoutPresenterStyle}" Placement="Bottom">
<Grid
MaxWidth="420"
Padding="0,16,0,16"
RowSpacing="8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ItemsRepeater ItemsSource="{x:Bind ViewModel.DisabledModules, Mode=OneWay}">
<ItemsRepeater.Layout>
<tkcontrols:StaggeredLayout
ColumnSpacing="8"
DesiredColumnWidth="378"
RowSpacing="8" />
</ItemsRepeater.Layout>
<ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="viewmodels:DashboardListItem">
<Button
Padding="0"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
AutomationProperties.Name="{x:Bind Label}"
Background="Transparent"
BorderThickness="0"
Click="DashboardListItemClick"
CornerRadius="{StaticResource OverlayCornerRadius}"
Tag="{x:Bind Tag, Mode=OneWay}">
<Grid
Padding="16,12"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource OverlayCornerRadius}"
RowSpacing="12">
<Grid ColumnSpacing="12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Width="20">
<Image.Source>
<BitmapImage UriSource="{x:Bind Icon, Mode=OneWay}" />
</Image.Source>
</Image>
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Text="2 activation shortcuts conflict with system or other modules, update to avoid unexpected behavior."
TextWrapping="Wrap" />
<StackPanel
Grid.Column="1"
VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
FontWeight="SemiBold"
Text="{x:Bind Label, Mode=OneWay}"
TextTrimming="CharacterEllipsis" />
<InfoBadge
Margin="4,0,0,0"
Style="{StaticResource NewInfoBadge}"
Visibility="{x:Bind IsNew, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}" />
Grid.Row="1"
Orientation="Vertical"
Spacing="8">
<tkcontrols:SettingsCard
Margin="0,12,0,0"
Description="Conflicts with Microsoft Copilot 365"
Header="PowerToys Run"
IsClickEnabled="True">
<tkcontrols:SettingsCard.HeaderIcon>
<ImageIcon Source="/Assets/Settings/Icons/PowerToysRun.png" />
</tkcontrols:SettingsCard.HeaderIcon>
<tkcontrols:SettingsCard.Resources>
<x:Double x:Key="SettingsCardWrapThreshold">286</x:Double>
</tkcontrols:SettingsCard.Resources>
<StackPanel
Padding="12,8"
Background="{ThemeResource SystemFillColorCriticalBrush}"
CornerRadius="4"
Orientation="Horizontal"
Spacing="8">
<controls:KeyVisual
Content="Alt"
Foreground="White"
VisualType="TextOnly" />
<controls:KeyVisual
Content="Space"
Foreground="White"
VisualType="TextOnly" />
</StackPanel>
</tkcontrols:SettingsCard>
<tkcontrols:SettingsCard
Description="Conflicts with Snipping Tool"
Header="ColorPicker"
IsClickEnabled="True">
<tkcontrols:SettingsCard.HeaderIcon>
<ImageIcon Source="/Assets/Settings/Icons/ColorPicker.png" />
</tkcontrols:SettingsCard.HeaderIcon>
<tkcontrols:SettingsCard.Resources>
<x:Double x:Key="SettingsCardWrapThreshold">286</x:Double>
</tkcontrols:SettingsCard.Resources>
<StackPanel
Padding="12,8"
Background="{ThemeResource SystemFillColorCriticalBrush}"
CornerRadius="4"
Orientation="Horizontal"
Spacing="8">
<controls:KeyVisual
Content="Win"
Foreground="White"
VisualType="TextOnly" />
<controls:KeyVisual
Content="Shift"
Foreground="White"
VisualType="TextOnly" />
<controls:KeyVisual
Content="C"
Foreground="White"
VisualType="TextOnly" />
</StackPanel>
</tkcontrols:SettingsCard>
</StackPanel>
<FontIcon
Grid.Column="2"
Width="20"
Margin="0,0,-12,0"
FontSize="16"
Glyph="&#xE72E;"
Visibility="{x:Bind IsLocked, Converter={StaticResource BoolToInvertedVisibilityConverter}, ConverterParameter=True, Mode=OneWay}">
<ToolTipService.ToolTip>
<TextBlock x:Uid="GPO_SettingIsManaged_ToolTip" TextWrapping="WrapWholeWords" />
</ToolTipService.ToolTip>
</FontIcon>
<ToggleSwitch
x:Uid="Enable_Module"
Grid.Column="3"
Margin="0,-2,0,0"
HorizontalAlignment="Right"
AutomationProperties.HelpText="{x:Bind Label}"
IsEnabled="{x:Bind IsLocked, Converter={StaticResource BoolNegationConverter}, ConverterParameter=True, Mode=OneWay}"
IsOn="{x:Bind IsEnabled, Mode=TwoWay}"
OffContent=""
OnContent=""
Style="{StaticResource RightAlignedCompactToggleSwitchStyle}" />
</Grid>
</Grid>
</Button>
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
</StackPanel>
</Flyout>
</Button.Flyout>
</Button>
<Button
Grid.Column="2"
Click="SWVersionButtonClicked"
Style="{StaticResource SubtleButtonStyle}">
<Grid ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<FontIcon
FontSize="20"
Foreground="{ThemeResource AccentTextFillColorTertiaryBrush}"
Glyph="&#xE895;" />
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBlock FontWeight="SemiBold" Text="Update available" />
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Style="{StaticResource CaptionTextBlockStyle}"
Text="Learn more about 0.92" />
</StackPanel>
</Grid>
</Button>
</Grid>
<Grid
x:Name="EnabledCard"
Grid.Row="1"
Margin="0,8,0,0"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource OverlayCornerRadius}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
Margin="20,16,0,8"
FontWeight="SemiBold"
Style="{StaticResource SubtitleTextBlockStyle}"
Text="Active modules" />
<TextBlock
Grid.Row="1"
Margin="20,0,0,16"
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Text="These modules are currently enabled on your system" />
<ItemsRepeater
x:Name="DashboardView"
Grid.Row="2"
ItemsSource="{x:Bind ViewModel.AllModules, Mode=OneWay}">
<ItemsRepeater.Layout>
<StackLayout Orientation="Vertical" Spacing="0" />
</ItemsRepeater.Layout>
<ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="viewmodels:DashboardListItem">
<tkcontrols:SettingsCard
Background="Transparent"
BorderBrush="{ThemeResource DividerStrokeColorDefaultBrush}"
BorderThickness="0,1,0,0"
Click="DashboardListItemClick"
CornerRadius="0"
Header="{x:Bind Label, Mode=OneWay}"
IsClickEnabled="True">
<tkcontrols:SettingsCard.HeaderIcon>
<ImageIcon>
<ImageIcon.Source>
<BitmapImage UriSource="{x:Bind Icon, Mode=OneWay}" />
</ImageIcon.Source>
</ImageIcon>
</tkcontrols:SettingsCard.HeaderIcon>
<ToggleSwitch IsEnabled="{x:Bind IsLocked, Converter={StaticResource BoolNegationConverter}, ConverterParameter=True, Mode=OneWay}" IsOn="{x:Bind IsEnabled, Mode=TwoWay}" />
<tkcontrols:SettingsCard.Description>
<ItemsControl
IsTabStop="False"
ItemTemplateSelector="{StaticResource ModuleItemTemplateSelector}"
ItemsSource="{x:Bind DashboardModuleItems, Mode=OneWay}"
Visibility="{x:Bind IsEnabled, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Spacing="0" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</tkcontrols:SettingsCard.Description>
</tkcontrols:SettingsCard>
<!--<StackPanel
Grid.Column="1"
VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
FontWeight="SemiBold"
Text=""
TextTrimming="CharacterEllipsis" />
<InfoBadge
Margin="4,0,0,0"
Style="{StaticResource NewInfoBadge}"
Visibility="{x:Bind IsNew, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}" />
</StackPanel>-->
<!--<FontIcon
Grid.Column="2"
Width="20"
Margin="0,0,-12,0"
FontSize="16"
Glyph="&#xE72E;"
Visibility="{x:Bind IsLocked, Converter={StaticResource BoolToInvertedVisibilityConverter}, ConverterParameter=True, Mode=OneWay}">
<ToolTipService.ToolTip>
<TextBlock x:Uid="GPO_SettingIsManaged_ToolTip" TextWrapping="WrapWholeWords" />
</ToolTipService.ToolTip>
</FontIcon>-->
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
</Grid>
<Grid
x:Name="DisabledCard"
Grid.Row="2"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource OverlayCornerRadius}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
Margin="20,16,0,8"
FontWeight="SemiBold"
Style="{StaticResource SubtitleTextBlockStyle}"
Text="Disabled modules" />
<TextBlock
Grid.Row="1"
Margin="20,0,0,16"
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Text="These modules are currently turned off" />
<ItemsRepeater Grid.Row="2" ItemsSource="{x:Bind ViewModel.DisabledModules, Mode=OneWay}">
<ItemsRepeater.Layout>
<StackLayout Orientation="Vertical" Spacing="0" />
</ItemsRepeater.Layout>
<ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="viewmodels:DashboardListItem">
<tkcontrols:SettingsCard
Background="Transparent"
BorderBrush="{ThemeResource DividerStrokeColorDefaultBrush}"
BorderThickness="0,1,0,0"
Click="DashboardListItemClick"
CornerRadius="0"
Header="{x:Bind Label, Mode=OneWay}"
IsClickEnabled="True">
<tkcontrols:SettingsCard.HeaderIcon>
<ImageIcon>
<ImageIcon.Source>
<BitmapImage UriSource="{x:Bind Icon, Mode=OneWay}" />
</ImageIcon.Source>
</ImageIcon>
</tkcontrols:SettingsCard.HeaderIcon>
<ToggleSwitch IsEnabled="{x:Bind IsLocked, Converter={StaticResource BoolNegationConverter}, ConverterParameter=True, Mode=OneWay}" IsOn="{x:Bind IsEnabled, Mode=TwoWay}" />
</tkcontrols:SettingsCard>
<!--<StackPanel
Grid.Column="1"
VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
FontWeight="SemiBold"
Text=""
TextTrimming="CharacterEllipsis" />
<InfoBadge
Margin="4,0,0,0"
Style="{StaticResource NewInfoBadge}"
Visibility="{x:Bind IsNew, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}" />
</StackPanel>-->
<!--<FontIcon
Grid.Column="2"
Width="20"
Margin="0,0,-12,0"
FontSize="16"
Glyph="&#xE72E;"
Visibility="{x:Bind IsLocked, Converter={StaticResource BoolToInvertedVisibilityConverter}, ConverterParameter=True, Mode=OneWay}">
<ToolTipService.ToolTip>
<TextBlock x:Uid="GPO_SettingIsManaged_ToolTip" TextWrapping="WrapWholeWords" />
</ToolTipService.ToolTip>
</FontIcon>-->
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
</Grid>
</Grid>
</Grid>
</ScrollViewer>
<!--<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="860" />
</VisualState.StateTriggers>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="DisabledCard.(Grid.Row)" Value="2" />
<Setter Target="DisabledCard.(Grid.Column)" Value="0" />
<Setter Target="DisabledCard.(Grid.ColumnSpan)" Value="2" />
<Setter Target="EnabledCard.(Grid.ColumnSpan)" Value="2" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>-->
</Grid>
</Page>

View File

@@ -0,0 +1,758 @@
<Page
x:Class="Microsoft.PowerToys.Settings.UI.Views.DashboardPage2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Lib="using:Microsoft.PowerToys.Settings.UI.Library"
xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls"
xmlns:converters="using:Microsoft.PowerToys.Settings.UI.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:tkcontrols="using:CommunityToolkit.WinUI.Controls"
xmlns:tkconverters="using:CommunityToolkit.WinUI.Converters"
xmlns:viewmodels="using:Microsoft.PowerToys.Settings.UI.ViewModels"
AutomationProperties.LandmarkType="Main"
DataContext="DashboardViewModel"
mc:Ignorable="d">
<Page.Resources>
<DataTemplate x:Key="KeyVisualTemplate">
<controls:KeyVisual
VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw"
Content="{Binding}"
IsTabStop="False"
VisualType="TextOnly" />
</DataTemplate>
<DataTemplate x:Key="CommaTemplate">
<StackPanel Background="{ThemeResource SystemFillColorSolidAttentionBackground}">
<TextBlock
Margin="4,0"
VerticalAlignment="Bottom"
Text="," />
</StackPanel>
</DataTemplate>
<converters:KeyVisualTemplateSelector
x:Key="KeyVisualTemplateSelector"
CommaTemplate="{StaticResource CommaTemplate}"
KeyVisualTemplate="{StaticResource KeyVisualTemplate}" />
<converters:ModuleItemTemplateSelector
x:Key="ModuleItemTemplateSelector"
ButtonTemplate="{StaticResource ModuleItemButtonTemplate}"
KBMTemplate="{StaticResource ModuleItemKBMTemplate}"
ShortcutTemplate="{StaticResource ModuleItemShortcutTemplate}"
TextTemplate="{StaticResource ModuleItemTextTemplate}" />
<tkconverters:CollectionVisibilityConverter x:Key="CollectionVisibilityConverter" />
<Style x:Name="KeysListViewContainerStyle" TargetType="ListViewItem">
<Setter Property="IsTabStop" Value="False" />
</Style>
<converters:UpdateStateToBoolConverter x:Key="UpdateStateToBoolConverter" />
<tkconverters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
<tkconverters:BoolNegationConverter x:Key="BoolNegationConverter" />
<tkconverters:BoolToVisibilityConverter
x:Key="BoolToInvertedVisibilityConverter"
FalseValue="Visible"
TrueValue="Collapsed" />
<DataTemplate x:Key="OriginalKeyTemplate" x:DataType="x:String">
<controls:KeyVisual Content="{Binding}" VisualType="SmallOutline" />
</DataTemplate>
<DataTemplate x:Key="RemappedKeyTemplate" x:DataType="x:String">
<controls:KeyVisual Content="{Binding}" VisualType="Small" />
</DataTemplate>
<DataTemplate x:Key="ModuleItemTextTemplate" x:DataType="viewmodels:DashboardModuleTextItem">
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{x:Bind Label, Mode=OneWay}"
TextWrapping="WrapWholeWords" />
</DataTemplate>
<DataTemplate x:Key="ModuleItemButtonTemplate" x:DataType="viewmodels:DashboardModuleButtonItem">
<TextBlock
Style="{StaticResource CaptionTextBlockStyle}"
Text="{x:Bind ButtonTitle}"
TextAlignment="Center"
TextWrapping="Wrap" />
<!--<Button
Click="{x:Bind ButtonClickHandler, Mode=OneWay}"
Content="{x:Bind ButtonTitle}"
FontSize="12"
Style="{StaticResource SubtleButtonStyle}" />-->
</DataTemplate>
<DataTemplate x:Key="ModuleItemShortcutTemplate" x:DataType="viewmodels:DashboardModuleShortcutItem">
<Grid ColumnSpacing="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="120" />
</Grid.ColumnDefinitions>
<Border Grid.Column="1" HorizontalAlignment="Left">
<ItemsControl
AutomationProperties.AccessibilityView="Raw"
IsTabStop="False"
ItemsSource="{x:Bind Shortcut, Mode=TwoWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Spacing="4" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:KeyVisual
VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw"
Content="{Binding}"
FontWeight="SemiBold"
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
IsTabStop="False"
VisualType="TextOnly" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<TextBlock
VerticalAlignment="Center"
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Text="{x:Bind Label, Mode=OneWay}"
TextWrapping="WrapWholeWords" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="ModuleItemKBMTemplate" x:DataType="viewmodels:DashboardModuleKBMItem">
<Button x:Uid="DashboardKBMShowMappingsButton" HorizontalAlignment="Stretch">
<Button.Flyout>
<Flyout
x:Name="DetailsFlyout"
Placement="Bottom"
ShouldConstrainToRootBounds="False">
<StackPanel Orientation="Vertical" Spacing="4">
<ItemsControl ItemsSource="{x:Bind RemapKeys, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Spacing="4" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="Lib:KeysDataModel">
<StackPanel Orientation="Horizontal">
<Border
Padding="8,4"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource ControlCornerRadius}">
<ItemsControl
AutomationProperties.AccessibilityView="Raw"
IsTabStop="False"
ItemsSource="{x:Bind GetMappedOriginalKeys()}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Spacing="12" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:KeyVisual
VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw"
Content="{Binding}"
IsTabStop="False"
VisualType="TextOnly" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<controls:IsEnabledTextBlock
x:Uid="To"
Margin="8,0,8,0"
VerticalAlignment="Center"
Style="{StaticResource SecondaryIsEnabledTextBlockStyle}" />
<Border
Padding="8,4"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource AccentFillColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource ControlCornerRadius}">
<ItemsControl
AutomationProperties.AccessibilityView="Raw"
IsTabStop="False"
ItemsSource="{x:Bind GetMappedNewRemapKeys(15)}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Spacing="12" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:KeyVisual
VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw"
Content="{Binding}"
FontSize="12"
Foreground="{ThemeResource AccentFillColorDefaultBrush}"
IsTabStop="False"
VisualType="TextOnly" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{x:Bind RemapShortcuts, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Spacing="4" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="Lib:AppSpecificKeysDataModel">
<StackPanel Orientation="Horizontal">
<Border
Padding="8,0"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource ControlCornerRadius}">
<ItemsControl
AutomationProperties.AccessibilityView="Raw"
IsTabStop="False"
ItemTemplateSelector="{StaticResource KeyVisualTemplateSelector}"
ItemsSource="{x:Bind GetMappedOriginalKeysWithSplitChord()}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Spacing="12" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Border>
<controls:IsEnabledTextBlock
x:Uid="To"
Margin="8,0,8,0"
VerticalAlignment="Center"
Style="{StaticResource SecondaryIsEnabledTextBlockStyle}"
Visibility="{x:Bind Path=IsOpenUriOrIsRunProgram, Mode=OneWay, Converter={StaticResource BoolToInvertedVisibilityConverter}}" />
<controls:IsEnabledTextBlock
x:Uid="Starts"
Margin="8,0,8,0"
VerticalAlignment="Center"
Style="{StaticResource SecondaryIsEnabledTextBlockStyle}"
Visibility="{x:Bind Path=IsOpenUriOrIsRunProgram, Mode=OneWay}" />
<Border
Padding="8,4"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource AccentFillColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource ControlCornerRadius}">
<ItemsControl
AutomationProperties.AccessibilityView="Raw"
IsTabStop="False"
ItemsSource="{x:Bind GetMappedNewRemapKeys(15)}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Spacing="12" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:KeyVisual
VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw"
Content="{Binding}"
Foreground="{ThemeResource AccentFillColorDefaultBrush}"
IsTabStop="False"
VisualType="TextOnly" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<TextBlock
Margin="4,0,0,0"
VerticalAlignment="Center"
Foreground="{ThemeResource AccentFillColorDefaultBrush}"
Text="{x:Bind TargetApp}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Flyout>
</Button.Flyout>
</Button>
</DataTemplate>
<Style
x:Key="CustomFlyoutPresenterStyle"
BasedOn="{StaticResource DefaultFlyoutPresenterStyle}"
TargetType="FlyoutPresenter">
<Setter Property="MinWidth" Value="486" />
<Setter Property="Padding" Value="0" />
</Style>
</Page.Resources>
<Grid Margin="16,0,0,0" RowSpacing="24">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
x:Uid="DashboardTitle"
MaxWidth="1000"
Margin="24,0,0,0"
VerticalAlignment="Center"
Style="{StaticResource TitleTextBlockStyle}" />
<!--<InfoBar
x:Uid="UpdateAvailable"
Margin="0,0,16,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
CornerRadius="8"
IsClosable="False"
IsOpen="{x:Bind ViewModel.UpdateAvailable, Mode=OneWay}"
Severity="Informational">
<InfoBar.ActionButton>
<Button x:Uid="LearnMore" />
</InfoBar.ActionButton>
</InfoBar>-->
<ScrollViewer
x:Name="MainScrollViewer"
Grid.Row="1"
HorizontalAlignment="Stretch">
<Grid>
<Grid
MaxWidth="1000"
Padding="12,0"
RowSpacing="16">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid ColumnSpacing="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border
Width="156"
Height="86"
CornerRadius="8">
<Border.Background>
<ImageBrush ImageSource="/Assets/Settings/Modules/CmdPalHero.png" />
</Border.Background>
</Border>
<Button Grid.Column="1" Style="{StaticResource SubtleButtonStyle}">
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBlock FontWeight="SemiBold" Text="Command Palette is here!" />
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Style="{StaticResource CaptionTextBlockStyle}"
Text="Learn what's new in 0.90" />
</StackPanel>
</Button>
</Grid>
<Button Grid.Column="1" Style="{StaticResource SubtleButtonStyle}">
<Grid ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<FontIcon
FontSize="20"
Foreground="{ThemeResource SystemFillColorCriticalBrush}"
Glyph="&#xE814;" />
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBlock FontWeight="SemiBold" Text="2 shortcut conflicts" />
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Style="{StaticResource CaptionTextBlockStyle}"
Text="Shortcuts conflict with system" />
</StackPanel>
</Grid>
<Button.Flyout>
<Flyout FlyoutPresenterStyle="{StaticResource CustomFlyoutPresenterStyle}" Placement="Bottom">
<Grid
MaxWidth="420"
Padding="0,16,0,16"
RowSpacing="8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Text="2 activation shortcuts conflict with system or other modules, update to avoid unexpected behavior."
TextWrapping="Wrap" />
<StackPanel
Grid.Row="1"
Orientation="Vertical"
Spacing="8">
<tkcontrols:SettingsCard
Margin="0,12,0,0"
Description="Conflicts with Microsoft Copilot 365"
Header="PowerToys Run"
IsClickEnabled="True">
<tkcontrols:SettingsCard.HeaderIcon>
<ImageIcon Source="/Assets/Settings/Icons/PowerToysRun.png" />
</tkcontrols:SettingsCard.HeaderIcon>
<tkcontrols:SettingsCard.Resources>
<x:Double x:Key="SettingsCardWrapThreshold">286</x:Double>
</tkcontrols:SettingsCard.Resources>
<StackPanel
Padding="12,8"
Background="{ThemeResource SystemFillColorCriticalBrush}"
CornerRadius="4"
Orientation="Horizontal"
Spacing="8">
<controls:KeyVisual
Content="Alt"
Foreground="White"
VisualType="TextOnly" />
<controls:KeyVisual
Content="Space"
Foreground="White"
VisualType="TextOnly" />
</StackPanel>
</tkcontrols:SettingsCard>
<tkcontrols:SettingsCard
Description="Conflicts with Snipping Tool"
Header="ColorPicker"
IsClickEnabled="True">
<tkcontrols:SettingsCard.HeaderIcon>
<ImageIcon Source="/Assets/Settings/Icons/ColorPicker.png" />
</tkcontrols:SettingsCard.HeaderIcon>
<tkcontrols:SettingsCard.Resources>
<x:Double x:Key="SettingsCardWrapThreshold">286</x:Double>
</tkcontrols:SettingsCard.Resources>
<StackPanel
Padding="12,8"
Background="{ThemeResource SystemFillColorCriticalBrush}"
CornerRadius="4"
Orientation="Horizontal"
Spacing="8">
<controls:KeyVisual
Content="Win"
Foreground="White"
VisualType="TextOnly" />
<controls:KeyVisual
Content="Shift"
Foreground="White"
VisualType="TextOnly" />
<controls:KeyVisual
Content="C"
Foreground="White"
VisualType="TextOnly" />
</StackPanel>
</tkcontrols:SettingsCard>
</StackPanel>
</Grid>
</Flyout>
</Button.Flyout>
</Button>
<Button
Grid.Column="2"
Click="SWVersionButtonClicked"
Style="{StaticResource SubtleButtonStyle}">
<Grid ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<FontIcon
FontSize="20"
Foreground="{ThemeResource AccentTextFillColorTertiaryBrush}"
Glyph="&#xE895;" />
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBlock FontWeight="SemiBold" Text="Update available" />
<TextBlock
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
Style="{StaticResource CaptionTextBlockStyle}"
Text="Learn more about 0.92" />
</StackPanel>
</Grid>
</Button>
</Grid>
<Grid Grid.Row="1" ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid
Margin="0,8,0,0"
VerticalAlignment="Top"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource OverlayCornerRadius}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
Margin="20,16,0,16"
FontWeight="SemiBold"
Style="{StaticResource SubtitleTextBlockStyle}"
Text="Quick launch" />
<Rectangle
Grid.Row="1"
Height="1"
HorizontalAlignment="Stretch"
Fill="{ThemeResource DividerStrokeColorDefaultBrush}" />
<ItemsRepeater
Grid.Row="2"
Margin="16"
ItemsSource="{x:Bind ViewModel.AllActiveModulesWithButtons, Mode=OneWay}">
<ItemsRepeater.Layout>
<tkcontrols:WrapLayout HorizontalSpacing="8" VerticalSpacing="8" />
</ItemsRepeater.Layout>
<ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="viewmodels:DashboardListItem">
<Grid
Width="136"
Height="86"
Background="{ThemeResource ControlFillColorDefaultBrush}"
BorderBrush="{ThemeResource ControlStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource OverlayCornerRadius}">
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Image
Width="16"
Height="16"
HorizontalAlignment="Center"
Source="{x:Bind Icon, Mode=OneWay}" />
<ItemsControl
Grid.Row="1"
HorizontalAlignment="Center"
IsTabStop="False"
ItemTemplate="{StaticResource ModuleItemButtonTemplate}"
ItemsSource="{x:Bind DashboardModuleItems, Mode=OneWay}"
Visibility="{x:Bind IsEnabled, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Spacing="4" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</Grid>
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
</Grid>
<Grid
Grid.Row="1"
Margin="0,8,0,0"
VerticalAlignment="Top"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource OverlayCornerRadius}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
Margin="20,16,0,16"
FontWeight="SemiBold"
Style="{StaticResource SubtitleTextBlockStyle}"
Text="Shortcuts" />
<Rectangle
Grid.Row="1"
Height="1"
HorizontalAlignment="Stretch"
Fill="{ThemeResource DividerStrokeColorDefaultBrush}" />
<ItemsRepeater
Grid.Row="2"
Margin="16"
ItemsSource="{x:Bind ViewModel.AllActiveModulesWithShortcuts, Mode=OneWay}">
<ItemsRepeater.Layout>
<StackLayout Orientation="Vertical" Spacing="0" />
</ItemsRepeater.Layout>
<ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="viewmodels:DashboardListItem">
<Grid BorderBrush="{ThemeResource DividerStrokeColorDefaultBrush}" BorderThickness="0,0,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel
Margin="0,8,0,0"
Orientation="Horizontal"
Spacing="8">
<Image Width="16" Source="{x:Bind Icon, Mode=OneWay}" />
<TextBlock Text="{x:Bind Label, Mode=OneWay}" />
</StackPanel>
<ItemsControl
Grid.Row="1"
Margin="24,4,0,16"
IsTabStop="False"
ItemTemplate="{StaticResource ModuleItemShortcutTemplate}"
ItemsSource="{x:Bind DashboardModuleItems, Mode=OneWay}"
Visibility="{x:Bind IsEnabled, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Spacing="4" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
</Grid>
<Grid
x:Name="EnabledCard"
Grid.RowSpan="2"
Grid.Column="1"
Width="400"
Margin="0,8,0,0"
VerticalAlignment="Top"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{StaticResource OverlayCornerRadius}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock
Margin="20,16,0,16"
FontWeight="SemiBold"
Style="{StaticResource SubtitleTextBlockStyle}"
Text="Modules" />
<Button
Margin="0,0,8,0"
HorizontalAlignment="Right"
Style="{StaticResource SubtleButtonStyle}">
<FontIcon
FontSize="16"
Foreground="{StaticResource TextFillColorSecondaryBrush}"
Glyph="&#xE8CB;" />
<Button.Flyout>
<MenuFlyout Placement="Bottom">
<RadioMenuFlyoutItem IsChecked="True" Text="Alphabetical" />
<RadioMenuFlyoutItem Text="Status" />
<RadioMenuFlyoutItem Text="Category" />
</MenuFlyout>
</Button.Flyout>
</Button>
<ItemsRepeater
x:Name="DashboardView"
Grid.Row="2"
ItemsSource="{x:Bind ViewModel.AllModules, Mode=OneWay}">
<ItemsRepeater.Layout>
<StackLayout Orientation="Vertical" Spacing="0" />
</ItemsRepeater.Layout>
<ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="viewmodels:DashboardListItem">
<tkcontrols:SettingsCard
MinHeight="0"
Padding="16,4,16,4"
Background="Transparent"
BorderBrush="{ThemeResource DividerStrokeColorDefaultBrush}"
BorderThickness="0,1,0,0"
Click="DashboardListItemClick"
CornerRadius="0"
Header="{x:Bind Label, Mode=OneWay}"
IsClickEnabled="True">
<tkcontrols:SettingsCard.Resources>
<x:Double x:Key="SettingsCardWrapThreshold">0</x:Double>
</tkcontrols:SettingsCard.Resources>
<tkcontrols:SettingsCard.HeaderIcon>
<ImageIcon>
<ImageIcon.Source>
<BitmapImage UriSource="{x:Bind Icon, Mode=OneWay}" />
</ImageIcon.Source>
</ImageIcon>
</tkcontrols:SettingsCard.HeaderIcon>
<ToggleSwitch
IsEnabled="{x:Bind IsLocked, Converter={StaticResource BoolNegationConverter}, ConverterParameter=True, Mode=OneWay}"
IsOn="{x:Bind IsEnabled, Mode=TwoWay}"
OffContent=" "
OnContent=" " />
</tkcontrols:SettingsCard>
<!--<StackPanel
Grid.Column="1"
VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
FontWeight="SemiBold"
Text=""
TextTrimming="CharacterEllipsis" />
<InfoBadge
Margin="4,0,0,0"
Style="{StaticResource NewInfoBadge}"
Visibility="{x:Bind IsNew, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}" />
</StackPanel>-->
<!--<FontIcon
Grid.Column="2"
Width="20"
Margin="0,0,-12,0"
FontSize="16"
Glyph="&#xE72E;"
Visibility="{x:Bind IsLocked, Converter={StaticResource BoolToInvertedVisibilityConverter}, ConverterParameter=True, Mode=OneWay}">
<ToolTipService.ToolTip>
<TextBlock x:Uid="GPO_SettingIsManaged_ToolTip" TextWrapping="WrapWholeWords" />
</ToolTipService.ToolTip>
</FontIcon>-->
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
</Grid>
</Grid>
</Grid>
</Grid>
</ScrollViewer>
<!--<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="860" />
</VisualState.StateTriggers>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="DisabledCard.(Grid.Row)" Value="2" />
<Setter Target="DisabledCard.(Grid.Column)" Value="0" />
<Setter Target="DisabledCard.(Grid.ColumnSpan)" Value="2" />
<Setter Target="EnabledCard.(Grid.ColumnSpan)" Value="2" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>-->
</Grid>
</Page>

View File

@@ -0,0 +1,59 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Threading;
using System.Threading.Tasks;
using ManagedCommon;
using Microsoft.PowerToys.Settings.UI.Helpers;
using Microsoft.PowerToys.Settings.UI.Library;
using Microsoft.PowerToys.Settings.UI.OOBE.Views;
using Microsoft.PowerToys.Settings.UI.ViewModels;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Windows.Storage.Pickers;
namespace Microsoft.PowerToys.Settings.UI.Views
{
/// <summary>
/// Dashboard Settings Page.
/// </summary>
public sealed partial class DashboardPage2 : Page, IRefreshablePage
{
/// <summary>
/// Gets or sets view model.
/// </summary>
public DashboardViewModel ViewModel { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="DashboardPage2"/> class.
/// Dashboard Settings page constructor.
/// </summary>
public DashboardPage2()
{
InitializeComponent();
var settingsUtils = new SettingsUtils();
ViewModel = new DashboardViewModel(
SettingsRepository<GeneralSettings>.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
}
public void RefreshEnabledState()
{
ViewModel.ModuleEnabledChangedOnSettingsPage();
}
private void SWVersionButtonClicked(object sender, RoutedEventArgs e)
{
ViewModel.SWVersionButtonClicked();
}
private void DashboardListItemClick(object sender, RoutedEventArgs e)
{
ViewModel.DashboardListItemClick(sender);
}
}
}

View File

@@ -0,0 +1,382 @@
<?xml version="1.0" encoding="utf-8" ?>
<Page
x:Class="Microsoft.PowerToys.Settings.UI.SettingsXAML.Views.SearchPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:CommunityToolkit.WinUI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:Microsoft.PowerToys.Settings.UI.SettingsXAML.Views"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="using:CommunityToolkit.WinUI"
mc:Ignorable="d">
<Page.Resources>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.ThemeDictionaries>
<!-- ControlFillColorQuarternaryBrush does not exist (yet) in WinUI, only in Windows Visual Library (Figma) -->
<ResourceDictionary x:Key="Default">
<StaticResource x:Key="TokenItemBackground" ResourceKey="ControlFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBackgroundPointerOver" ResourceKey="ControlFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundPressed" ResourceKey="ControlFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundSelected" ResourceKey="AccentFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBackgroundPointerOverSelected" ResourceKey="AccentFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundPressedSelected" ResourceKey="AccentFillColorTertiaryBrush" />
<StaticResource x:Key="TokenItemBorderBrush" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPointerOver" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPressed" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushSelected" ResourceKey="AccentFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPointerOverSelected" ResourceKey="AccentFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBorderBrushPressedSelected" ResourceKey="AccentFillColorTertiaryBrush" />
<StaticResource x:Key="TokenItemForeground" ResourceKey="TextFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPointerOver" ResourceKey="TextFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPressed" ResourceKey="TextFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemForegroundSelected" ResourceKey="TextOnAccentFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPointerOverSelected" ResourceKey="TextOnAccentFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPressedSelected" ResourceKey="TextOnAccentFillColorSecondaryBrush" />
<Thickness x:Key="TokenItemBorderThickness">1</Thickness>
</ResourceDictionary>
<ResourceDictionary x:Key="Light">
<StaticResource x:Key="TokenItemBackground" ResourceKey="ControlFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBackgroundPointerOver" ResourceKey="ControlFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundPressed" ResourceKey="ControlFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundSelected" ResourceKey="AccentFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBackgroundPointerOverSelected" ResourceKey="AccentFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundPressedSelected" ResourceKey="AccentFillColorTertiaryBrush" />
<StaticResource x:Key="TokenItemBorderBrush" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPointerOver" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPressed" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushSelected" ResourceKey="AccentFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPointerOverSelected" ResourceKey="AccentFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBorderBrushPressedSelected" ResourceKey="AccentFillColorTertiaryBrush" />
<StaticResource x:Key="TokenItemForeground" ResourceKey="TextFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPointerOver" ResourceKey="TextFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPressed" ResourceKey="TextFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemForegroundSelected" ResourceKey="TextOnAccentFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPointerOverSelected" ResourceKey="TextOnAccentFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPressedSelected" ResourceKey="TextOnAccentFillColorSecondaryBrush" />
<Thickness x:Key="TokenItemBorderThickness">1</Thickness>
</ResourceDictionary>
<ResourceDictionary x:Key="HighContrast">
<StaticResource x:Key="TokenItemBackground" ResourceKey="ControlFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBackgroundPointerOver" ResourceKey="ControlFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundPressed" ResourceKey="ControlFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundSelected" ResourceKey="AccentFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBackgroundPointerOverSelected" ResourceKey="AccentFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBackgroundPressedSelected" ResourceKey="AccentFillColorTertiaryBrush" />
<StaticResource x:Key="TokenItemBorderBrush" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPointerOver" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPressed" ResourceKey="ControlStrokeColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushSelected" ResourceKey="AccentFillColorDefaultBrush" />
<StaticResource x:Key="TokenItemBorderBrushPointerOverSelected" ResourceKey="AccentFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemBorderBrushPressedSelected" ResourceKey="AccentFillColorTertiaryBrush" />
<StaticResource x:Key="TokenItemForeground" ResourceKey="TextFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPointerOver" ResourceKey="TextFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPressed" ResourceKey="TextFillColorSecondaryBrush" />
<StaticResource x:Key="TokenItemForegroundSelected" ResourceKey="TextOnAccentFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPointerOverSelected" ResourceKey="TextOnAccentFillColorPrimaryBrush" />
<StaticResource x:Key="TokenItemForegroundPressedSelected" ResourceKey="TextOnAccentFillColorSecondaryBrush" />
<Thickness x:Key="TokenItemBorderThickness">1</Thickness>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
<Style x:Key="TokenViewSelectorBarStyle" TargetType="SelectorBar">
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="TabNavigation" Value="Once" />
<Setter Property="Padding" Value="{ThemeResource SelectorBarPadding}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="SelectorBar">
<Grid
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
ColumnDefinitions="Auto"
CornerRadius="{TemplateBinding CornerRadius}"
RowDefinitions="Auto">
<Grid.ChildrenTransitions>
<TransitionCollection>
<RepositionThemeTransition />
</TransitionCollection>
</Grid.ChildrenTransitions>
<ItemsView
x:Name="PART_ItemsView"
MaxWidth="{TemplateBinding MaxWidth}"
MaxHeight="{TemplateBinding MaxHeight}"
Padding="{TemplateBinding Padding}"
ItemsSource="{TemplateBinding Items}"
TabNavigation="{TemplateBinding TabNavigation}">
<ItemsView.Layout>
<StackLayout Orientation="Horizontal" Spacing="8" />
</ItemsView.Layout>
</ItemsView>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="TokenViewSelectorBarItemStyle" TargetType="SelectorBarItem">
<Setter Property="BackgroundSizing" Value="OuterBorderEdge" />
<Setter Property="Background" Value="{ThemeResource TokenItemBackground}" />
<Setter Property="Foreground" Value="{ThemeResource TokenItemForeground}" />
<Setter Property="BorderBrush" Value="{ThemeResource TokenItemBorderBrush}" />
<Setter Property="BorderThickness" Value="{ThemeResource TokenItemBorderThickness}" />
<Setter Property="Padding" Value="23,5,23,6" />
<Setter Property="CornerRadius" Value="16" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="FocusVisualMargin" Value="{ThemeResource SelectorBarItemFocusVisualMargin}" />
<Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
<Setter Property="UseSystemFocusVisuals" Value="{StaticResource UseSystemFocusVisuals}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="SelectorBarItem">
<Grid
x:Name="PART_ContainerRoot"
Background="{TemplateBinding Background}"
BackgroundSizing="{TemplateBinding BackgroundSizing}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.BackgroundTransition>
<BrushTransition Duration="0:0:0.083" />
</Grid.BackgroundTransition>
<!-- Placeholder for Child UIElement -->
<StackPanel
Grid.Column="1"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Orientation="Horizontal"
Spacing="{ThemeResource SelectorBarItemSpacing}">
<ContentPresenter
x:Name="PART_IconVisual"
Margin="{ThemeResource SelectorBarItemIconVisualMargin}"
Content="{TemplateBinding Icon}"
Foreground="{TemplateBinding Foreground}"
RenderTransformOrigin="0.5,0.5">
<ContentPresenter.RenderTransform>
<ScaleTransform x:Name="IconTransform" ScaleX="{ThemeResource SelectorBarItemIconScale}" ScaleY="{ThemeResource SelectorBarItemIconScale}" />
</ContentPresenter.RenderTransform>
</ContentPresenter>
<TextBlock
x:Name="PART_TextVisual"
Margin="{ThemeResource SelectorBarItemTextVisualMargin}"
FontFamily="{TemplateBinding FontFamily}"
FontSize="{TemplateBinding FontSize}"
FontWeight="{TemplateBinding FontWeight}"
Foreground="{TemplateBinding Foreground}"
Text="{TemplateBinding Text}"
TextWrapping="Wrap" />
</StackPanel>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CombinedStates">
<VisualState x:Name="UnselectedNormal" />
<VisualState x:Name="UnselectedPointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_TextVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundPointerOver}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_IconVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundPointerOver}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBackgroundPointerOver}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBorderBrushPointerOver}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="UnselectedPressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_TextVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundPressed}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_IconVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundPressed}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBackgroundPressed}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBorderBrushPressed}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedNormal">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_TextVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_IconVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBackgroundSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBorderBrushSelected}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedPointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_TextVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundPointerOverSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_IconVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundPointerOverSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBackgroundPointerOverSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBorderBrushPointerOverSelected}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedPressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_TextVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundPressedSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_IconVisual" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemForegroundPressedSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBackgroundPressedSelected}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_ContainerRoot" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TokenItemBorderBrushPressedSelected}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="DisabledStates">
<VisualState x:Name="Enabled" />
<VisualState x:Name="Disabled" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Page.Resources>
<Grid
MaxWidth="1000"
Margin="16,0,0,0"
RowSpacing="24">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock
MaxWidth="1000"
VerticalAlignment="Center"
Style="{StaticResource TitleTextBlockStyle}">
<Run Text="Results for:" />
<Run x:Name="SearchTxt" />
</TextBlock>
<SelectorBar
x:Name="FilterBar"
Grid.Row="1"
Margin="0,0,0,0"
Loaded="FilterBar_Loaded"
Style="{StaticResource TokenViewSelectorBarStyle}">
<SelectorBarItem
IsSelected="True"
Style="{StaticResource TokenViewSelectorBarItemStyle}"
Text="All" />
<SelectorBarItem Style="{StaticResource TokenViewSelectorBarItemStyle}" Text="Command Palette">
<SelectorBarItem.Icon>
<BitmapIcon
Width="16"
ShowAsMonochrome="False"
UriSource="/Assets/Settings/Icons/CmdPal.png" />
</SelectorBarItem.Icon>
</SelectorBarItem>
<SelectorBarItem Style="{StaticResource TokenViewSelectorBarItemStyle}" Text="PowerToys Run">
<BitmapIcon
Width="16"
ShowAsMonochrome="False"
UriSource="/Assets/Settings/Icons/PowerToysRun.png" />
</SelectorBarItem>
</SelectorBar>
<ScrollViewer
x:Name="MainScrollViewer"
Grid.Row="2"
Margin="0,12,0,0"
HorizontalAlignment="Stretch">
<Grid>
<StackPanel MaxWidth="1000" Spacing="4">
<StackPanel
Margin="0,0,0,8"
Orientation="Horizontal"
Spacing="8">
<Image Width="20" Source="/Assets/Settings/Icons/CmdPal.png" />
<TextBlock FontWeight="SemiBold" Text="Command Palette" />
</StackPanel>
<controls:SettingsCard
Description="If multiple monitors are in use, Command Palette can be launched on a desired monitor"
Header="Preferred monitor position"
HeaderIcon="{ui:FontIcon Glyph=&#xe78b;}">
<ComboBox SelectedIndex="0">
<ComboBoxItem>Monitor with mouse cursor</ComboBoxItem>
<ComboBoxItem>Primary monitor</ComboBoxItem>
<ComboBoxItem>Monitor with focused window</ComboBoxItem>
<ComboBoxItem>Don't move</ComboBoxItem>
</ComboBox>
</controls:SettingsCard>
<StackPanel
Margin="0,32,0,8"
Orientation="Horizontal"
Spacing="8">
<Image Width="20" Source="/Assets/Settings/Icons/PowerToysRun.png" />
<TextBlock FontWeight="SemiBold" Text="PowerToys Run" />
</StackPanel>
<controls:SettingsCard
Description="If multiple monitors are in use, PowerToys Run can be launched on a desired monitor"
Header="Preferred monitor position"
HeaderIcon="{ui:FontIcon Glyph=&#xe78b;}">
<ComboBox SelectedIndex="0">
<ComboBoxItem>Monitor with mouse cursor</ComboBoxItem>
<ComboBoxItem>Primary monitor</ComboBoxItem>
<ComboBoxItem>Monitor with focused window</ComboBoxItem>
</ComboBox>
</controls:SettingsCard>
<controls:SettingsCard
Description="Pressing tab will first select through the available context buttons of the current selection before moving into the next result"
Header="Tab through context buttons"
HeaderIcon="{ui:FontIcon Glyph=&#xE7FD;}">
<ToggleSwitch IsOn="True" />
</controls:SettingsCard>
</StackPanel>
</Grid>
</ScrollViewer>
</Grid>
</Page>

View File

@@ -0,0 +1,33 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Navigation;
namespace Microsoft.PowerToys.Settings.UI.SettingsXAML.Views
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class SearchPage : Page
{
public SearchPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter is string searchQuery)
{
SearchTxt.Text = searchQuery;
}
}
private void FilterBar_Loaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
FilterBar.SelectedItem = FilterBar.Items[0];
}
}
}

View File

@@ -93,6 +93,7 @@
<NavigationView
x:Name="navigationView"
Grid.Row="1"
Margin="12,0,0,0"
Canvas.ZIndex="0"
CompactModeThresholdWidth="1007"
DisplayModeChanged="NavigationView_DisplayModeChanged"
@@ -110,12 +111,22 @@
<SolidColorBrush x:Key="NavigationViewContentBackground" Color="Transparent" />
<SolidColorBrush x:Key="NavigationViewContentGridBorderBrush" Color="Transparent" />
</NavigationView.Resources>
<NavigationView.PaneHeader>
<AutoSuggestBox
Margin="0,0,0,12"
PlaceholderText="Search settings"
QueryIcon="Find"
QuerySubmitted="AutoSuggestBox_QuerySubmitted" />
</NavigationView.PaneHeader>
<NavigationView.MenuItems>
<NavigationViewItem
x:Uid="Shell_Dashboard"
helpers:NavHelper.NavigateTo="views:DashboardPage"
Icon="{ui:FontIcon Glyph=&#xE80F;}" />
<NavigationViewItem
Content="Dashboard 2"
helpers:NavHelper.NavigateTo="views:DashboardPage2"
Icon="{ui:FontIcon Glyph=&#xE80F;}" />
<NavigationViewItem x:Uid="Shell_General" helpers:NavHelper.NavigateTo="views:GeneralPage">
<NavigationViewItem.Icon>
<AnimatedIcon>

View File

@@ -8,6 +8,7 @@ using System.Linq;
using ManagedCommon;
using Microsoft.PowerToys.Settings.UI.Helpers;
using Microsoft.PowerToys.Settings.UI.Services;
using Microsoft.PowerToys.Settings.UI.SettingsXAML.Views;
using Microsoft.PowerToys.Settings.UI.ViewModels;
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
@@ -472,5 +473,11 @@ namespace Microsoft.PowerToys.Settings.UI.Views
IntPtr hWnd = NativeMethods.FindWindow(ptTrayIconWindowClass, ptTrayIconWindowClass);
NativeMethods.SendMessage(hWnd, NativeMethods.WM_COMMAND, ID_EXIT_MENU_COMMAND, 0);
}
private void AutoSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
{
NavigationService.Navigate(typeof(SearchPage), args.QueryText);
sender.Text = string.Empty; // Clear the search box after submitting the query
}
}
}

View File

@@ -31,6 +31,12 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
public Func<string, int> SendConfigMSG { get; }
public ObservableCollection<DashboardListItem> AllModules { get; set; } = new ObservableCollection<DashboardListItem>();
public ObservableCollection<DashboardListItem> AllActiveModulesWithShortcuts { get; set; } = new ObservableCollection<DashboardListItem>();
public ObservableCollection<DashboardListItem> AllActiveModulesWithButtons { get; set; } = new ObservableCollection<DashboardListItem>();
public ObservableCollection<DashboardListItem> ActiveModules { get; set; } = new ObservableCollection<DashboardListItem>();
public ObservableCollection<DashboardListItem> DisabledModules { get; set; } = new ObservableCollection<DashboardListItem>();
@@ -60,7 +66,12 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
AddDashboardListItem(moduleType);
}
AllModules = new ObservableCollection<DashboardListItem>(_allModules);
ActiveModules = new ObservableCollection<DashboardListItem>(_allModules.Where(x => x.IsEnabled));
AllActiveModulesWithShortcuts = new ObservableCollection<DashboardListItem>(_allModules.Where(x => x.IsEnabled && x.DashboardModuleItems.Any(item => item is DashboardModuleShortcutItem)));
AllActiveModulesWithButtons = new ObservableCollection<DashboardListItem>(_allModules.Where(x => x.IsEnabled && x.DashboardModuleItems.Any(item => item is DashboardModuleButtonItem)));
DisabledModules = new ObservableCollection<DashboardListItem>(_allModules.Where(x => !x.IsEnabled));
UpdatingSettings updatingSettingsConfig = UpdatingSettings.LoadSettings();