MainPage.xaml
1 <Page 2 x:Class="PowerToys.FileLocksmithUI.Views.MainPage" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:converters="using:PowerToys.FileLocksmithUI.Converters" 6 xmlns:core="using:Microsoft.Xaml.Interactions.Core" 7 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 8 xmlns:interactivity="using:Microsoft.Xaml.Interactivity" 9 xmlns:interop="using:PowerToys.FileLocksmithLib.Interop" 10 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 11 xmlns:tkcontrols="using:CommunityToolkit.WinUI.Controls" 12 xmlns:tkconverters="using:CommunityToolkit.WinUI.Converters" 13 xmlns:ui="using:CommunityToolkit.WinUI" 14 mc:Ignorable="d"> 15 <Page.Resources> 16 <tkconverters:BoolToVisibilityConverter 17 x:Key="boolToVisibilityConverter" 18 FalseValue="Visible" 19 TrueValue="Collapsed" /> 20 21 <tkconverters:DoubleToVisibilityConverter 22 x:Key="doubleToVisibilityConverter" 23 FalseValue="Visible" 24 GreaterThan="0" 25 TrueValue="Collapsed" /> 26 <converters:FileCountConverter x:Key="fileCountConverter" /> 27 <converters:PidToIconConverter x:Key="pidToIconConverter" /> 28 <converters:UserToSystemWarningVisibilityConverter x:Key="userToSystemWarningVisibilityConverter" /> 29 <converters:FileListToDescriptionConverter x:Key="fileListToDescriptionConverter" /> 30 </Page.Resources> 31 32 <interactivity:Interaction.Behaviors> 33 <core:EventTriggerBehavior EventName="Loaded"> 34 <core:InvokeCommandAction Command="{x:Bind ViewModel.LoadProcessesCommand}" /> 35 </core:EventTriggerBehavior> 36 </interactivity:Interaction.Behaviors> 37 38 <Grid RowSpacing="8"> 39 <Grid.RowDefinitions> 40 <RowDefinition x:Name="ButtonsRow" Height="Auto" /> 41 <RowDefinition Height="*" /> 42 </Grid.RowDefinitions> 43 44 <Grid Margin="16,0"> 45 <Button Click="ShowSelectedPathsButton_Click" Content="{x:Bind ViewModel.Paths, Converter={StaticResource fileListToDescriptionConverter}}"> 46 <Button.Template> 47 <ControlTemplate TargetType="Button"> 48 <TextBlock 49 HorizontalAlignment="Left" 50 Style="{ThemeResource BodyStrongTextBlockStyle}" 51 Text="{TemplateBinding Content}" /> 52 </ControlTemplate> 53 </Button.Template> 54 <ToolTipService.ToolTip> 55 <TextBlock x:Uid="PathsTooltipDescription" TextWrapping="WrapWholeWords" /> 56 </ToolTipService.ToolTip> 57 </Button> 58 59 <StackPanel 60 HorizontalAlignment="Right" 61 Orientation="Horizontal" 62 Spacing="8"> 63 <Button 64 Command="{Binding LoadProcessesCommand}" 65 Content="{ui:FontIcon Glyph=, 66 FontSize=16}" 67 Style="{StaticResource SubtleButtonStyle}"> 68 <ToolTipService.ToolTip> 69 <TextBlock x:Uid="Reload" /> 70 </ToolTipService.ToolTip> 71 </Button> 72 <Button 73 x:Name="RestartAsAdminBtn" 74 Command="{Binding RestartElevatedCommand}" 75 Content="{ui:FontIcon Glyph=, 76 FontSize=16}" 77 Style="{StaticResource SubtleButtonStyle}" 78 Visibility="{x:Bind ViewModel.IsElevated, Converter={StaticResource boolToVisibilityConverter}}"> 79 <ToolTipService.ToolTip> 80 <TextBlock x:Uid="RestartAsAdmin" /> 81 </ToolTipService.ToolTip> 82 </Button> 83 </StackPanel> 84 </Grid> 85 86 <Grid Grid.Row="1"> 87 <Grid Visibility="{x:Bind ViewModel.IsLoading, Converter={StaticResource boolToVisibilityConverter}, Mode=OneWay}"> 88 <ListView 89 x:Name="ProcessesListView" 90 Padding="0,0,0,12" 91 IncrementalLoadingThreshold="10" 92 ItemsSource="{x:Bind ViewModel.Processes}" 93 SelectionMode="None"> 94 <ListView.ItemTemplate> 95 <DataTemplate x:DataType="interop:ProcessResult"> 96 <tkcontrols:SettingsExpander Margin="0,0,0,4"> 97 <tkcontrols:SettingsExpander.Resources> 98 <x:Double x:Key="SettingsCardWrapThreshold">0</x:Double> 99 </tkcontrols:SettingsExpander.Resources> 100 <tkcontrols:SettingsExpander.Header> 101 <!-- We can't use the HeaderIcon because it only support a BitmapIcon, which only supports UriSource - not a direct BitmapImage --> 102 <StackPanel Orientation="Horizontal" Spacing="8"> 103 <Image 104 Width="16" 105 Height="16" 106 Source="{x:Bind pid, Converter={StaticResource pidToIconConverter}}" /> 107 <TextBlock IsTextSelectionEnabled="True" Text="{x:Bind name}" /> 108 </StackPanel> 109 </tkcontrols:SettingsExpander.Header> 110 <tkcontrols:SettingsExpander.Content> 111 <StackPanel Orientation="Horizontal" Spacing="8"> 112 <FontIcon 113 Foreground="{ThemeResource InfoBarWarningSeverityIconBackground}" 114 Glyph="" 115 Visibility="{x:Bind user, Mode=OneTime, Converter={StaticResource userToSystemWarningVisibilityConverter}}"> 116 <ToolTipService.ToolTip> 117 <TextBlock x:Uid="ProcessIsSystemUserWarning" TextWrapping="Wrap" /> 118 </ToolTipService.ToolTip> 119 </FontIcon> 120 <Button 121 MinWidth="128" 122 Command="{Binding Path=DataContext.EndTaskCommand, ElementName=ProcessesListView}" 123 CommandParameter="{Binding}"> 124 <StackPanel Orientation="Horizontal" Spacing="8"> 125 <FontIcon FontSize="16" Glyph="" /> 126 <TextBlock x:Uid="EndTask" /> 127 </StackPanel> 128 </Button> 129 </StackPanel> 130 </tkcontrols:SettingsExpander.Content> 131 <tkcontrols:SettingsExpander.Items> 132 <tkcontrols:SettingsCard x:Uid="ProcessID"> 133 <TextBlock 134 Foreground="{ThemeResource TextFillColorSecondaryBrush}" 135 IsTextSelectionEnabled="True" 136 Text="{x:Bind pid}" /> 137 </tkcontrols:SettingsCard> 138 <tkcontrols:SettingsCard x:Uid="User"> 139 <TextBlock 140 Foreground="{ThemeResource TextFillColorSecondaryBrush}" 141 IsTextSelectionEnabled="True" 142 Text="{x:Bind user}" /> 143 </tkcontrols:SettingsCard> 144 <tkcontrols:SettingsCard> 145 <tkcontrols:SettingsCard.Header> 146 <TextBlock> 147 <Run x:Uid="Files" /> 148 <Run Text="(" /><Run Text="{x:Bind files, Converter={StaticResource fileCountConverter}}" /><Run Text=")" /> 149 </TextBlock> 150 </tkcontrols:SettingsCard.Header> 151 <Button Click="ShowProcessFiles_Click"> 152 <TextBlock x:Uid="ShowProcessFiles" /> 153 </Button> 154 </tkcontrols:SettingsCard> 155 </tkcontrols:SettingsExpander.Items> 156 </tkcontrols:SettingsExpander> 157 </DataTemplate> 158 </ListView.ItemTemplate> 159 </ListView> 160 161 <StackPanel 162 HorizontalAlignment="Center" 163 VerticalAlignment="Center" 164 Orientation="Vertical" 165 Spacing="8" 166 Visibility="{x:Bind ViewModel.Processes.Count, Mode=OneWay, Converter={StaticResource doubleToVisibilityConverter}}"> 167 <Button HorizontalAlignment="Center" Command="{Binding LoadProcessesCommand}"> 168 <Button.Template> 169 <ControlTemplate TargetType="Button"> 170 <FontIcon FontSize="32" Glyph="" /> 171 </ControlTemplate> 172 </Button.Template> 173 <ToolTipService.ToolTip> 174 <TextBlock x:Uid="Reload" /> 175 </ToolTipService.ToolTip> 176 </Button> 177 <TextBlock x:Uid="EmptyListDescription" Foreground="{ThemeResource TextFillColorSecondaryBrush}" /> 178 </StackPanel> 179 </Grid> 180 <ProgressRing 181 Width="48" 182 Height="48" 183 IsActive="{x:Bind ViewModel.IsLoading, Mode=OneWay}" /> 184 </Grid> 185 186 <ContentDialog x:Name="SelectedFilesListDialog" x:Uid="SelectedFilesListDialog"> 187 <TextBlock 188 IsTextSelectionEnabled="True" 189 Text="{x:Bind ViewModel.PathsToString, Mode=OneWay}" 190 TextWrapping="Wrap" /> 191 </ContentDialog> 192 <ContentDialog x:Name="ProcessFilesListDialog" x:Uid="ProcessFilesListDialog"> 193 <ScrollViewer Padding="16" HorizontalScrollBarVisibility="Auto"> 194 <TextBlock 195 x:Name="ProcessFilesListDialogTextBlock" 196 x:Uid="ProcessFilesListDialogTextBlock" 197 IsTextSelectionEnabled="True" /> 198 </ScrollViewer> 199 </ContentDialog> 200 </Grid> 201 </Page>