XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEToolBox

【WPF】XFE工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
<Page x:Class="XFEToolBox.Client.Views.Pages.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:gif="http://wpfanimatedgif.codeplex.com"
      xmlns:controls="clr-namespace:XFEToolBox.WpfCore.Controls;assembly=XFEToolBox.WpfCore"
      Title="MainPage">
    <Page.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
        <Style x:Key="DashboardCardStyle" TargetType="Button" BasedOn="{StaticResource ToolBoxButtonStyle}">
            <Setter Property="Height" Value="80"/>
            <Setter Property="Margin" Value="4"/>
            <Setter Property="Padding" Value="12"/>
            <Setter Property="Background" Value="#FAFAFE"/>
            <Setter Property="BorderBrush" Value="#E2E2EF"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
            <Setter Property="controls:ButtonAssist.CornerRadius" Value="14"/>
            <Setter Property="controls:ButtonAssist.HoverBackground" Value="#F2F2FC"/>
            <Setter Property="controls:ButtonAssist.HoverBorderBrush" Value="#BEBEEB"/>
        </Style>
        <Style x:Key="SectionTitleStyle" TargetType="TextBlock">
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="FontSize" Value="15"/>
            <Setter Property="FontWeight" Value="SemiBold"/>
        </Style>
        <Style x:Key="SectionHintStyle" TargetType="TextBlock">
            <Setter Property="Foreground" Value="#C9FFFFFF"/>
            <Setter Property="FontSize" Value="9.5"/>
            <Setter Property="Margin" Value="0,3,0,0"/>
        </Style>
    </Page.Resources>

    <controls:SmoothScrollViewer Padding="14,8,12,14">
        <StackPanel>
            <Border Margin="3,0,3,8" Padding="18" CornerRadius="18" BorderBrush="#65FFFFFF" BorderThickness="1">
                <Border.Background>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                        <GradientStop Color="#785C5ED6"/>
                        <GradientStop Color="#4C7354CF" Offset="1"/>
                    </LinearGradientBrush>
                </Border.Background>
                <Grid>
                    <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                    <Grid>
                        <StackPanel>
                            <TextBlock Text="今天想做什么?" Foreground="White" FontSize="20" FontWeight="Bold"/>
                            <TextBlock Text="搜索并启动工具、软件、项目或页面" Foreground="#D8FFFFFF" FontSize="10" Margin="0,5,0,0"/>
                        </StackPanel>
                        <Border HorizontalAlignment="Right" VerticalAlignment="Center" Padding="9,4" Background="#22FFFFFF" CornerRadius="8">
                            <TextBlock Text="{Binding LauncherHotkeyHint}" Foreground="#EAFFFFFF" FontSize="9"/>
                        </Border>
                    </Grid>
                    <Grid Grid.Row="1" Margin="0,15,0,0">
                        <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                        <controls:TextEditor x:Name="HomeSearchBox" Height="42" Padding="13,0" FontSize="12"
                                             HintText="输入名称、作者、分类或标签…" KeyDown="HomeSearchBox_KeyDown"/>
                        <Button Grid.Column="1" Content="打开命令面板" Height="42" Margin="8,0,0,0"
                                controls:ButtonAssist.IsPrimary="True" Click="OpenCommandPalette_Click"/>
                    </Grid>
                </Grid>
            </Border>

            <StackPanel Margin="3,10,3,0" Visibility="{Binding QuickAccessVisibility}">
                <Grid Margin="4,0,4,7">
                    <StackPanel><TextBlock Text="快速访问" Style="{StaticResource SectionTitleStyle}"/><TextBlock Text="固定项优先,其次是最近使用和常用入口" Style="{StaticResource SectionHintStyle}"/></StackPanel>
                    <Button Content="管理" HorizontalAlignment="Right" VerticalAlignment="Center" Height="28" Click="ManagePinnedItems_Click"/>
                </Grid>
                <ItemsControl ItemsSource="{Binding QuickAccessItems}">
                    <ItemsControl.ItemsPanel><ItemsPanelTemplate><UniformGrid Columns="2"/></ItemsPanelTemplate></ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Button Style="{StaticResource DashboardCardStyle}" CommandParameter="{Binding}" Click="LauncherItem_Click" IsEnabled="{Binding IsEnabled}">
                                    <Grid>
                                        <Grid.ColumnDefinitions><ColumnDefinition Width="46"/><ColumnDefinition Width="*"/><ColumnDefinition Width="30"/></Grid.ColumnDefinitions>
                                        <Border Width="38" Height="38" CornerRadius="12" Background="#EEEEFB" HorizontalAlignment="Left" VerticalAlignment="Center">
                                            <Image gif:ImageBehavior.AnimatedSource="{Binding IconSource}" gif:ImageBehavior.RepeatBehavior="Forever" Width="24" Height="24" Stretch="Uniform"/>
                                        </Border>
                                        <StackPanel Grid.Column="1" VerticalAlignment="Center">
                                            <TextBlock Text="{Binding Title}" Foreground="#414156" FontSize="12" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
                                            <TextBlock Text="{Binding Subtitle}" Foreground="#8C8C9D" FontSize="9" Margin="0,4,0,0" TextTrimming="CharacterEllipsis"/>
                                        </StackPanel>
                                        <TextBlock Grid.Column="2" Text="{Binding KindText}" Foreground="#7777C8" FontSize="8.5" HorizontalAlignment="Right" VerticalAlignment="Bottom"/>
                                    </Grid>
                                </Button>
                                <Button Content="{Binding PinGlyph}" Width="24" Height="24" MinWidth="24" Padding="0" Margin="0,9,9,0"
                                        HorizontalAlignment="Right" VerticalAlignment="Top" ToolTip="固定或取消固定"
                                        CommandParameter="{Binding}" Click="TogglePin_Click"/>
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>

            <StackPanel Margin="3,17,3,0">
                <Grid Margin="4,0,4,7"><StackPanel><TextBlock Text="教程与动态" Style="{StaticResource SectionTitleStyle}"/><TextBlock Text="网络内容延迟加载,不影响工作台使用" Style="{StaticResource SectionHintStyle}"/></StackPanel></Grid>
                <controls:Carousel x:Name="mainCarousel" Height="220" HorizontalAlignment="Stretch" IsLoading="True"
                                   StatusMessage="正在获取教程内容…" Interval="0:0:8" RetryRequested="MainCarousel_RetryRequested"/>
            </StackPanel>

            <StackPanel Margin="3,17,3,0" Visibility="{Binding ActivitySectionVisibility}">
                <Grid Margin="4,0,4,7">
                    <StackPanel><TextBlock Text="活动中心" Style="{StaticResource SectionTitleStyle}"/><TextBlock Text="下载、构建和发布状态会集中显示在这里" Style="{StaticResource SectionHintStyle}"/></StackPanel>
                    <TextBlock Text="{Binding ActivityCountText}" Foreground="#E3FFFFFF" FontSize="9.5" HorizontalAlignment="Right" VerticalAlignment="Center"/>
                </Grid>
                <ItemsControl ItemsSource="{Binding ActivityItems}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Border Margin="4,3" Padding="13,10" Background="#F9F9FD" BorderBrush="#E2E2ED" BorderThickness="1" CornerRadius="13">
                                <Grid>
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                    <StackPanel>
                                        <TextBlock Text="{Binding Title}" Foreground="#45455A" FontSize="11" FontWeight="SemiBold"/>
                                        <TextBlock Text="{Binding Message}" Foreground="#8B8B9D" FontSize="9" Margin="0,4,0,5" TextTrimming="CharacterEllipsis"/>
                                        <ProgressBar Height="4" Minimum="0" Maximum="100" Value="{Binding Progress}"/>
                                    </StackPanel>
                                    <StackPanel Grid.Column="1" Margin="14,0,0,0" VerticalAlignment="Center">
                                        <TextBlock Text="{Binding ProgressText}" Foreground="#7373C7" FontSize="9.5" HorizontalAlignment="Right"/>
                                        <Button Content="取消" Margin="0,5,0,0" Padding="8,2" Command="{Binding CancelCommand}"
                                                Visibility="{Binding CanCancel, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                                    </StackPanel>
                                </Grid>
                            </Border>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>

            <StackPanel Margin="3,17,3,0">
                <Grid Margin="4,0,4,7">
                    <StackPanel><TextBlock Text="继续工作" Style="{StaticResource SectionTitleStyle}"/><TextBlock Text="工具、软件和 Code Studio 项目" Style="{StaticResource SectionHintStyle}"/></StackPanel>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
                        <Button Content="清空" Visibility="{Binding RecentItemsVisibility}" Margin="0,0,7,0" Click="ClearRecentUsage_Click"/>
                        <TextBlock Text="{Binding RecentUsageCountText}" Foreground="#E2FFFFFF" FontSize="9.5" VerticalAlignment="Center"/>
                    </StackPanel>
                </Grid>
                <Border Background="#F8F8FD" BorderBrush="#65FFFFFF" BorderThickness="1" CornerRadius="17" Padding="7" MinHeight="92">
                    <Grid>
                        <ItemsControl ItemsSource="{Binding RecentItems}" Visibility="{Binding RecentItemsVisibility}">
                            <ItemsControl.ItemsPanel><ItemsPanelTemplate><UniformGrid Columns="2"/></ItemsPanelTemplate></ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <Button Style="{StaticResource DashboardCardStyle}" CommandParameter="{Binding}" Click="RecentItem_Click" IsEnabled="{Binding IsEnabled}">
                                            <Grid>
                                                <Grid.ColumnDefinitions><ColumnDefinition Width="46"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                                <Border Width="38" Height="38" CornerRadius="12" Background="#EEEEFB"><Image gif:ImageBehavior.AnimatedSource="{Binding IconSource}" gif:ImageBehavior.RepeatBehavior="Forever" Width="24" Height="24"/></Border>
                                                <StackPanel Grid.Column="1" Margin="9,0" VerticalAlignment="Center">
                                                    <TextBlock Text="{Binding Name}" Foreground="#414156" FontSize="11.5" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
                                                    <TextBlock Text="{Binding Detail}" Foreground="#9292A3" FontSize="8.8" Margin="0,4,0,0" TextTrimming="CharacterEllipsis"/>
                                                </StackPanel>
                                                <TextBlock Grid.Column="2" Text="{Binding LastUsedText}" Foreground="#7D7DCA" FontSize="8.5" VerticalAlignment="Bottom"/>
                                            </Grid>
                                        </Button>
                                        <Button Content="×" Width="22" Height="22" MinWidth="22" Padding="0" Margin="0,8,8,0" HorizontalAlignment="Right" VerticalAlignment="Top" CommandParameter="{Binding}" Click="RemoveRecentItem_Click"/>
                                    </Grid>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                        <Grid Visibility="{Binding RecentEmptyVisibility}" Margin="10">
                            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
                                <TextBlock Text="还没有最近使用记录" Foreground="#55556A" FontSize="11.5" FontWeight="SemiBold" HorizontalAlignment="Center"/>
                                <TextBlock Text="打开工具、软件或工具项目后会显示在这里" Foreground="#9999AA" FontSize="9.5" Margin="0,4,0,8"/>
                                <Button Content="前往工具箱" Click="OpenToolBox_Click"/>
                            </StackPanel>
                        </Grid>
                    </Grid>
                </Border>
            </StackPanel>

            <StackPanel Margin="3,17,3,0" Visibility="{Binding LatestToolsVisibility}">
                <Grid Margin="4,0,4,7"><StackPanel><TextBlock Text="最近更新的工具" Style="{StaticResource SectionTitleStyle}"/><TextBlock Text="根据本地工具目录缓存展示" Style="{StaticResource SectionHintStyle}"/></StackPanel></Grid>
                <ItemsControl ItemsSource="{Binding RecentlyUpdatedTools}">
                    <ItemsControl.ItemsPanel><ItemsPanelTemplate><UniformGrid Columns="2"/></ItemsPanelTemplate></ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Button Style="{StaticResource DashboardCardStyle}" CommandParameter="{Binding}" Click="LauncherItem_Click">
                                <Grid>
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="45"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                                    <Border Width="37" Height="37" CornerRadius="11" Background="#EEEEFB"><Image Source="{Binding IconSource}" Width="23" Height="23"/></Border>
                                    <StackPanel Grid.Column="1" Margin="9,0" VerticalAlignment="Center"><TextBlock Text="{Binding Title}" Foreground="#414156" FontSize="11.5" FontWeight="SemiBold"/><TextBlock Text="{Binding Subtitle}" Foreground="#9292A3" FontSize="8.8" Margin="0,4,0,0" TextTrimming="CharacterEllipsis"/></StackPanel>
                                </Grid>
                            </Button>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>

            <Border Margin="7,17,7,5" Padding="13,10" Background="#25FFFFFF" BorderBrush="#45FFFFFF" BorderThickness="1" CornerRadius="13" Visibility="{Binding AdminServerPanelVisibility}" MouseLeftButtonUp="AdminServerPanel_MouseLeftButtonUp">
                <Grid>
                    <StackPanel Orientation="Horizontal"><Ellipse Width="8" Height="8" Fill="#75F0A6" Margin="0,0,8,0"/><TextBlock Text="{Binding AdminServerStatus}" Foreground="White" FontSize="11" FontWeight="SemiBold"/></StackPanel>
                    <TextBlock Text="{Binding AdminUpdatedText}" Foreground="#D3FFFFFF" FontSize="9" HorizontalAlignment="Right"/>
                </Grid>
            </Border>

        </StackPanel>
    </controls:SmoothScrollViewer>
</Page>