Files
fluid-explorer/Views/ShellView.xaml
T

127 lines
7.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<UserControl
x:Class="FluidExplorer.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:FluidExplorer.ViewModels"
xmlns:views="using:FluidExplorer.Views">
<!--
窗口内容放在 UserControl 而不是直接放在 Window 里:WinUI 的 x:Bind 带 Converter 时
生成的代码要求绑定根是 FrameworkElement,而 Window 不是,因此 Window 里不放任何 x:Bind。
视觉结构对齐 Windows 11 资源管理器:标签栏位于标题栏区域,Mica 由宿主窗口设置。
-->
<Grid x:Name="RootGrid">
<!--
标签页刻意不用 TabItemsSource/TabItemTemplate 绑定:TabView 的 TabItemsSource 与
TwoWay SelectedItem 组合在增删标签时会触发容器重建异常(实测出现过整个标签栏与内容区消失)。
这里由代码手工管理 TabItems,行为完全可控。
-->
<TabView
x:Name="TabHost"
IsAddTabButtonVisible="True"
TabWidthMode="SizeToContent"
CanDragTabs="True"
CanReorderTabs="True"
AllowDropTabs="True"
CloseButtonOverlayMode="OnPointerOver"
AddTabButtonClick="OnAddTabButtonClick"
TabCloseRequested="OnTabCloseRequested"
TabDroppedOutside="OnTabDroppedOutside"
SelectionChanged="OnTabSelectionChanged">
<TabView.TabStripHeader>
<Grid Width="8" />
</TabView.TabStripHeader>
<!-- 标签右侧的空白区域 = 窗口拖动区(宿主窗口的 SetTitleBar 指向它) -->
<TabView.TabStripFooter>
<Grid x:Name="TitleBarDragRegion" MinWidth="120" Height="40" Background="Transparent" />
</TabView.TabStripFooter>
</TabView>
<!-- ═══ 文件操作队列(常驻右下角,不打断操作,可展开/收起) ═══ -->
<Border x:Name="QueuePanel"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Margin="0,0,16,40"
Width="420"
MaxHeight="360"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
Background="{ThemeResource AcrylicInAppFillColorDefaultBrush}"
Visibility="{x:Bind ViewModel.IsQueueExpanded, Mode=OneWay, Converter={StaticResource BoolToVisibility}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Padding="12,8" ColumnSpacing="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Style="{StaticResource BodyStrongTextBlockStyle}" Text="文件操作队列" VerticalAlignment="Center" />
<Button Grid.Column="1" Style="{StaticResource ToolbarButtonStyle}" Width="28" Height="24"
ToolTipService.ToolTip="清除已完成" Click="OnClearFinishedJobsClick">
<FontIcon Glyph="{StaticResource GlyphClear}" FontSize="12" />
</Button>
<Button Grid.Column="2" Style="{StaticResource ToolbarButtonStyle}" Width="28" Height="24"
ToolTipService.ToolTip="收起" Click="OnCollapseQueueClick">
<FontIcon Glyph="&#xE70D;" FontSize="12" />
</Button>
</Grid>
<ListView Grid.Row="1"
Padding="4,0,4,8"
SelectionMode="None"
ItemsSource="{x:Bind ViewModel.JobRows, Mode=OneWay}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="vm:JobRowViewModel">
<Grid Padding="8,6" ColumnSpacing="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Spacing="3">
<StackPanel Orientation="Horizontal" Spacing="8">
<TextBlock Text="{x:Bind Title, Mode=OneWay}" Style="{StaticResource BodyStrongTextBlockStyle}" TextTrimming="CharacterEllipsis" />
<TextBlock Text="{x:Bind StateText, Mode=OneWay}"
Style="{StaticResource CaptionTextBlockStyle}"
Foreground="{ThemeResource TextFillColorSecondaryBrush}" />
</StackPanel>
<ProgressBar Value="{x:Bind Progress, Mode=OneWay}" Maximum="1"
IsIndeterminate="{x:Bind IsIndeterminate, Mode=OneWay}" />
<TextBlock Text="{x:Bind ProgressText, Mode=OneWay}"
Style="{StaticResource CaptionTextBlockStyle}"
Foreground="{ThemeResource TextFillColorTertiaryBrush}"
TextTrimming="CharacterEllipsis" />
<TextBlock Text="{x:Bind CurrentItem, Mode=OneWay}"
Style="{StaticResource CaptionTextBlockStyle}"
Foreground="{ThemeResource TextFillColorTertiaryBrush}"
TextTrimming="CharacterEllipsis" />
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4" VerticalAlignment="Center">
<Button Style="{StaticResource ToolbarButtonStyle}" Width="28" Height="28"
Tag="{x:Bind}" Click="OnPauseJobClick"
Visibility="{x:Bind CanPause, Mode=OneWay, Converter={StaticResource BoolToVisibility}}">
<FontIcon Glyph="{x:Bind PauseGlyph, Mode=OneWay}" FontSize="12" />
</Button>
<Button Style="{StaticResource ToolbarButtonStyle}" Width="28" Height="28"
Tag="{x:Bind}" Click="OnCancelJobClick"
Visibility="{x:Bind CanCancel, Mode=OneWay, Converter={StaticResource BoolToVisibility}}">
<FontIcon Glyph="{StaticResource GlyphStop}" FontSize="12" />
</Button>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Border>
</Grid>
</UserControl>