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.Admin.SoftwareManagementPage"
      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"
      Background="Transparent" Title="" Loaded="Page_Loaded">
    <Page.Resources>
        <Style x:Key="SoftwareCatalogItemStyle" TargetType="ListBoxItem" BasedOn="{StaticResource ToolBoxListBoxItemStyle}">
            <Setter Property="Margin" Value="0,0,0,8"/>
            <Setter Property="Padding" Value="0"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="MinHeight" Value="0"/>
        </Style>
        <Style x:Key="SoftwareStatusPill" TargetType="Border">
            <Setter Property="Background" Value="#EEEEF8"/>
            <Setter Property="BorderBrush" Value="#E1E1EF"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="CornerRadius" Value="9"/>
            <Setter Property="Padding" Value="8,4"/>
        </Style>
        <Style x:Key="SoftwareEditorSection" TargetType="Border">
            <Setter Property="Background" Value="White"/>
            <Setter Property="BorderBrush" Value="#E2E2ED"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="CornerRadius" Value="14"/>
            <Setter Property="Padding" Value="16"/>
            <Setter Property="Margin" Value="0,0,0,12"/>
        </Style>
        <Style x:Key="SuggestionChoiceButton" TargetType="Button" BasedOn="{StaticResource ToolBoxButtonStyle}">
            <Setter Property="HorizontalContentAlignment" Value="Left"/>
            <Setter Property="MinHeight" Value="30"/>
            <Setter Property="Padding" Value="10,5"/>
            <Setter Property="Margin" Value="0,0,0,4"/>
            <Setter Property="controls:ButtonAssist.CornerRadius" Value="9"/>
        </Style>
    </Page.Resources>

    <Grid Margin="14,9,14,12">
        <Grid.RowDefinitions>
            <RowDefinition Height="50"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Button x:Name="HeaderBackButton" Width="42" MinWidth="42" Height="42" Padding="0"
                    Visibility="Collapsed" ToolTip="返回软件目录" Click="BackButton_Click">
                <Path Width="16" Height="16" Stretch="Uniform" Stroke="{DynamicResource MainColor}"
                      StrokeThickness="2" StrokeStartLineCap="Round" StrokeEndLineCap="Round"
                      Data="M 14,2 L 4,8 L 14,14"/>
            </Button>
            <Border x:Name="HeaderIcon" Style="{StaticResource AdminPageHeaderIcon}">
                <Path Width="21" Height="21" Stretch="Uniform" Stroke="White" StrokeThickness="1.6"
                      StrokeStartLineCap="Round" StrokeEndLineCap="Round" StrokeLineJoin="Round"
                      Data="M 2,5 L 11,1 L 20,5 L 11,9 Z M 2,5 L 2,14 L 11,19 L 20,14 L 20,5 M 11,9 L 11,19"/>
            </Border>
            <StackPanel Grid.Column="1" Margin="11,0,0,0" VerticalAlignment="Center">
                <TextBlock x:Name="HeaderTitleText" Text="软件发布与管理" Style="{StaticResource AdminPageTitle}"/>
                <TextBlock x:Name="HeaderSubtitleText" Text="浏览软件目录,选择条目后进入独立编辑界面" Style="{StaticResource AdminPageSubtitle}"/>
            </StackPanel>
            <StackPanel x:Name="CatalogHeaderActions" Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
                <Button Content="新建软件" controls:ButtonAssist.IsPrimary="True" Margin="0,0,8,0" Click="NewButton_Click"/>
                <Button Content="刷新目录" Click="RefreshButton_Click"/>
            </StackPanel>
            <StackPanel x:Name="EditorHeaderActions" Grid.Column="2" Orientation="Horizontal"
                        VerticalAlignment="Center" Visibility="Collapsed">
                <Button Content="返回目录" Margin="0,0,8,0" Click="BackButton_Click"/>
                <Button x:Name="HeaderSaveButton" Content="保存更改" controls:ButtonAssist.IsPrimary="True" Click="SaveButton_Click"/>
            </StackPanel>
        </Grid>

        <controls:RoundedClipBorder x:Name="CatalogView" Grid.Row="1" Style="{StaticResource AdminCard}"
                                    Margin="0,10,0,9" Padding="0">
            <Grid Margin="18,16,18,14">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid>
                    <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                    <StackPanel>
                        <TextBlock Text="软件目录" Style="{StaticResource AdminSectionTitle}"/>
                        <TextBlock Text="单击软件进入编辑;搜索和筛选不会影响服务器数据" Style="{StaticResource AdminSectionSubtitle}"/>
                    </StackPanel>
                    <Border Grid.Column="1" Style="{StaticResource SoftwareStatusPill}" VerticalAlignment="Center">
                        <TextBlock x:Name="CatalogSummaryText" Text="0 个软件" Foreground="#77778C" FontSize="9.5"/>
                    </Border>
                </Grid>

                <Grid Grid.Row="1" Margin="0,14,0,13">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="2.2*"/><ColumnDefinition Width="10"/>
                        <ColumnDefinition Width="1*"/><ColumnDefinition Width="10"/>
                        <ColumnDefinition Width="1*"/><ColumnDefinition Width="10"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <controls:TextEditor x:Name="SearchTextBox" Style="{StaticResource AdminTextEditor}"
                                         HintText="搜索软件名称、标识、发布者、分类或标签"
                                         TextChanged="CatalogSearchTextBox_TextChanged"/>
                    <ComboBox x:Name="CategoryFilterBox" Grid.Column="2" Height="36" SelectionChanged="CatalogFilterBox_SelectionChanged"/>
                    <ComboBox x:Name="StatusFilterBox" Grid.Column="4" Height="36"
                              DisplayMemberPath="Text" TextSearch.TextPath="Text"
                              SelectionChanged="CatalogFilterBox_SelectionChanged"/>
                    <Button Grid.Column="6" Content="清除筛选" MinWidth="84" Click="ClearFiltersButton_Click"/>
                </Grid>

                <Grid Grid.Row="2">
                    <ListBox x:Name="SoftwareList" BorderThickness="0" Background="Transparent"
                             ItemContainerStyle="{StaticResource SoftwareCatalogItemStyle}"
                             ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                             ScrollViewer.CanContentScroll="True"
                             VirtualizingPanel.IsVirtualizing="True"
                             VirtualizingPanel.VirtualizationMode="Recycling">
                        <ListBox.ItemsPanel>
                            <ItemsPanelTemplate><VirtualizingStackPanel/></ItemsPanelTemplate>
                        </ListBox.ItemsPanel>
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Border Padding="14,12" Background="#FCFCFF" BorderBrush="#E3E3EF"
                                        BorderThickness="1" CornerRadius="13" Cursor="Hand"
                                        Tag="{Binding}" Loaded="SoftwareCard_Loaded"
                                        MouseLeftButtonUp="SoftwareCard_MouseLeftButtonUp">
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="46"/><ColumnDefinition Width="14"/>
                                            <ColumnDefinition Width="2.2*"/><ColumnDefinition Width="18"/>
                                            <ColumnDefinition Width="1.25*"/><ColumnDefinition Width="18"/>
                                            <ColumnDefinition Width="Auto"/>
                                        </Grid.ColumnDefinitions>
                                        <Border Width="46" Height="46" CornerRadius="14" Background="#EEEEFC"
                                                BorderBrush="#E0E0F2" BorderThickness="1">
                                            <Grid>
                                                <TextBlock Text="{Binding Initial}" Foreground="{DynamicResource MainColor}"
                                                           FontSize="16" FontWeight="SemiBold"
                                                           HorizontalAlignment="Center" VerticalAlignment="Center">
                                                    <TextBlock.Style>
                                                        <Style TargetType="TextBlock">
                                                            <Setter Property="Visibility" Value="Collapsed"/>
                                                            <Style.Triggers>
                                                                <DataTrigger Binding="{Binding IconSource}" Value="{x:Null}">
                                                                    <Setter Property="Visibility" Value="Visible"/>
                                                                </DataTrigger>
                                                            </Style.Triggers>
                                                        </Style>
                                                    </TextBlock.Style>
                                                </TextBlock>
                                                <Image gif:ImageBehavior.AnimatedSource="{Binding IconSource}"
                                                       gif:ImageBehavior.RepeatBehavior="Forever"
                                                       Width="31" Height="31" Stretch="Uniform">
                                                    <Image.Style>
                                                        <Style TargetType="Image">
                                                            <Setter Property="Visibility" Value="Visible"/>
                                                            <Style.Triggers>
                                                                <DataTrigger Binding="{Binding IconSource}" Value="{x:Null}">
                                                                    <Setter Property="Visibility" Value="Collapsed"/>
                                                                </DataTrigger>
                                                            </Style.Triggers>
                                                        </Style>
                                                    </Image.Style>
                                                </Image>
                                            </Grid>
                                        </Border>
                                        <StackPanel Grid.Column="2" VerticalAlignment="Center">
                                            <StackPanel Orientation="Horizontal">
                                                <TextBlock Text="{Binding Item.Name}" Foreground="#45455A" FontSize="12.5"
                                                           FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
                                                <TextBlock Text="{Binding Item.Version}" Foreground="#9898A9" FontSize="9.5" Margin="9,2,0,0"/>
                                            </StackPanel>
                                            <TextBlock Text="{Binding Item.Summary}" Foreground="#7F7F93" FontSize="9.5"
                                                       Margin="0,4,0,0" TextTrimming="CharacterEllipsis"/>
                                            <TextBlock Text="{Binding Item.Id}" Foreground="#AAAABB" FontSize="8.8" Margin="0,4,0,0"/>
                                        </StackPanel>
                                        <StackPanel Grid.Column="4" VerticalAlignment="Center">
                                            <TextBlock Text="{Binding Item.Category}" Foreground="#5F5F78" FontSize="10.2"
                                                       FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
                                            <TextBlock Text="{Binding Item.Publisher}" Foreground="#9696A8" FontSize="9.2"
                                                       Margin="0,4,0,0" TextTrimming="CharacterEllipsis"/>
                                            <TextBlock Text="{Binding ChannelSummary}" Foreground="#A1A1B2" FontSize="8.8" Margin="0,4,0,0"/>
                                        </StackPanel>
                                        <StackPanel Grid.Column="6" Orientation="Horizontal" VerticalAlignment="Center">
                                            <Border Style="{StaticResource SoftwareStatusPill}" Margin="0,0,7,0">
                                                <TextBlock FontSize="9.2">
                                                    <TextBlock.Style>
                                                        <Style TargetType="TextBlock">
                                                            <Setter Property="Text" Value="未发布"/><Setter Property="Foreground" Value="#77778C"/>
                                                            <Style.Triggers>
                                                                <DataTrigger Binding="{Binding Item.Published}" Value="True"><Setter Property="Text" Value="已发布"/><Setter Property="Foreground" Value="#5E8D73"/></DataTrigger>
                                                                <DataTrigger Binding="{Binding Item.Enabled}" Value="False"><Setter Property="Text" Value="已停用"/><Setter Property="Foreground" Value="#B55E69"/></DataTrigger>
                                                            </Style.Triggers>
                                                        </Style>
                                                    </TextBlock.Style>
                                                </TextBlock>
                                            </Border>
                                            <Border Style="{StaticResource SoftwareStatusPill}" Margin="0,0,9,0">
                                                <TextBlock Text="{Binding FeaturedText}" Foreground="#7C6BB0" FontSize="9.2"/>
                                            </Border>
                                            <Path Width="9" Height="14" Stretch="Uniform" Stroke="#85859B" StrokeThickness="1.7"
                                                  StrokeStartLineCap="Round" StrokeEndLineCap="Round" Data="M 2,1 L 8,7 L 2,13"/>
                                        </StackPanel>
                                    </Grid>
                                </Border>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                    <StackPanel x:Name="CatalogEmptyState" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed">
                        <Border Width="56" Height="56" CornerRadius="18" Background="#EEEEFC">
                            <Path Width="24" Height="24" Stretch="Uniform" Stroke="{DynamicResource MainColor}"
                                  StrokeThickness="1.5" Data="M 2,5 L 11,1 L 20,5 L 11,9 Z M 2,5 L 2,14 L 11,19 L 20,14 L 20,5 M 11,9 L 11,19"/>
                        </Border>
                        <TextBlock Text="没有匹配的软件" Foreground="#55556C" FontSize="12" FontWeight="SemiBold"
                                   HorizontalAlignment="Center" Margin="0,12,0,0"/>
                        <TextBlock Text="调整筛选条件,或新建一个软件条目" Foreground="#9696A8" FontSize="9.5"
                                   HorizontalAlignment="Center" Margin="0,4,0,0"/>
                    </StackPanel>
                </Grid>
                <Grid Grid.Row="3" Margin="1,10,1,0">
                    <TextBlock x:Name="FilteredCountText" Foreground="#9292A6" FontSize="9.5"/>
                    <TextBlock Text="目录按名称排序 · 单击条目进入编辑" Foreground="#A1A1B2" FontSize="9.2" HorizontalAlignment="Right"/>
                </Grid>
            </Grid>
        </controls:RoundedClipBorder>

        <controls:RoundedClipBorder x:Name="EditorView" Grid.Row="1" Style="{StaticResource AdminCard}"
                                    Margin="0,10,0,9" Padding="0" Visibility="Collapsed">
            <Grid>
                <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                <Grid Margin="18,15,18,13">
                    <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                    <StackPanel>
                        <TextBlock x:Name="EditorTitleText" Text="编辑软件" Style="{StaticResource AdminSectionTitle}"/>
                        <TextBlock x:Name="EditorSubtitleText" Text="修改基础资料、展示状态和下载渠道" Style="{StaticResource AdminSectionSubtitle}"/>
                    </StackPanel>
                    <StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
                        <Border Style="{StaticResource SoftwareStatusPill}" Margin="0,0,7,0"><TextBlock x:Name="EditorIdBadgeText" Foreground="#77778C" FontSize="9.3"/></Border>
                        <Border Style="{StaticResource SoftwareStatusPill}"><TextBlock x:Name="EditorModeBadgeText" Text="编辑现有条目" Foreground="#77778C" FontSize="9.3"/></Border>
                    </StackPanel>
                </Grid>

                <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Padding="18,0,13,0">
                    <StackPanel>
                        <Border Style="{StaticResource SoftwareEditorSection}">
                            <StackPanel>
                                <TextBlock Text="基本信息" Style="{StaticResource AdminSectionTitle}"/>
                                <TextBlock Text="用于下载专区列表、详情页和检索;带 * 的字段为必填项" Style="{StaticResource AdminSectionSubtitle}" Margin="0,3,0,14"/>
                                <Grid>
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="12"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                                    <StackPanel><TextBlock Text="软件标识 *" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor x:Name="IdTextBox" Style="{StaticResource AdminTextEditor}" HintText="例如 xfe.studio.app"/></StackPanel>
                                    <StackPanel Grid.Column="2"><TextBlock Text="软件名称 *" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor x:Name="NameTextBox" Style="{StaticResource AdminTextEditor}" HintText="对用户显示的名称"/></StackPanel>
                                </Grid>
                                <TextBlock Text="一句话介绍" Style="{StaticResource AdminFormLabel}" Margin="2,12,0,5"/>
                                <controls:TextEditor x:Name="SummaryTextBox" Style="{StaticResource AdminTextEditor}" HintText="简要说明软件用途"/>
                                <Grid Margin="0,12,0,0">
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="12"/><ColumnDefinition Width="*"/><ColumnDefinition Width="12"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                                    <StackPanel><TextBlock Text="发布者" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor x:Name="PublisherTextBox" Style="{StaticResource AdminTextEditor}" HintText="作者或组织"/></StackPanel>
                                    <StackPanel Grid.Column="2">
                                        <TextBlock Text="分类" Style="{StaticResource AdminFormLabel}"/>
                                        <Grid>
                                            <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="7"/><ColumnDefinition Width="36"/></Grid.ColumnDefinitions>
                                            <controls:TextEditor x:Name="CategoryTextBox" Style="{StaticResource AdminTextEditor}" HintText="可直接输入新分类"/>
                                            <Button x:Name="CategoryAddButton" Grid.Column="2" Width="36" MinWidth="36" Height="36" Padding="0"
                                                    Content="+" FontSize="15" ToolTip="选择已有分类或自行添加" Click="CategoryAddButton_Click"/>
                                        </Grid>
                                    </StackPanel>
                                    <StackPanel Grid.Column="4"><TextBlock Text="版本" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor x:Name="VersionTextBox" Style="{StaticResource AdminTextEditor}" HintText="最新版"/></StackPanel>
                                </Grid>
                                <Grid Margin="0,12,0,0">
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="12"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                                    <StackPanel><TextBlock Text="官网地址" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor x:Name="WebsiteTextBox" Style="{StaticResource AdminTextEditor}" HintText="https://"/></StackPanel>
                                    <StackPanel Grid.Column="2"><TextBlock Text="图标地址(可留空)" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor x:Name="IconTextBox" Style="{StaticResource AdminTextEditor}" HintText="HTTP(S) 或 data:image,支持 PNG / ICO / SVG / GIF 等"/></StackPanel>
                                </Grid>
                                <TextBlock Text="详细介绍" Style="{StaticResource AdminFormLabel}" Margin="2,12,0,5"/>
                                <controls:TextEditor x:Name="DescriptionTextBox" Height="82" Style="{StaticResource AdminTextEditor}" Padding="11,8" AcceptsReturn="True" TextWrapping="Wrap" VerticalContentAlignment="Top" VerticalScrollBarVisibility="Auto" HintText="介绍主要功能和使用场景"/>
                                <TextBlock Text="注意事项" Style="{StaticResource AdminFormLabel}" Margin="2,12,0,5"/>
                                <controls:TextEditor x:Name="NoticeTextBox" Height="58" Style="{StaticResource AdminTextEditor}" Padding="11,8" AcceptsReturn="True" TextWrapping="Wrap" VerticalContentAlignment="Top" HintText="许可证、系统要求或使用提醒(可选)"/>
                            </StackPanel>
                        </Border>

                        <Border Style="{StaticResource SoftwareEditorSection}">
                            <StackPanel>
                                <TextBlock Text="标签" Style="{StaticResource AdminSectionTitle}"/>
                                <TextBlock Text="点击+可选择目录中已有标签,也可以输入一个新标签" Style="{StaticResource AdminSectionSubtitle}" Margin="0,3,0,12"/>
                                <Border MinHeight="42" Padding="7,5" Background="#FBFBFE" BorderBrush="#DDDDEC" BorderThickness="1" CornerRadius="11">
                                    <Grid>
                                        <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                        <ItemsControl x:Name="SelectedTagsItems" VerticalAlignment="Center">
                                            <ItemsControl.ItemsPanel><ItemsPanelTemplate><WrapPanel/></ItemsPanelTemplate></ItemsControl.ItemsPanel>
                                            <ItemsControl.ItemTemplate>
                                                <DataTemplate>
                                                    <Border Margin="0,0,6,2" Padding="9,5,4,5" Background="#EEEEFC" BorderBrush="#D5D5F2" BorderThickness="1" CornerRadius="10">
                                                        <StackPanel Orientation="Horizontal">
                                                            <TextBlock Text="{Binding}" Foreground="#5A5A80" FontSize="10" VerticalAlignment="Center"/>
                                                            <Button Content="×" Tag="{Binding}" Width="18" Height="18" MinWidth="18" Margin="5,0,0,0" Padding="0" BorderThickness="0" ToolTip="删除标签" Click="RemoveTagButton_Click"/>
                                                        </StackPanel>
                                                    </Border>
                                                </DataTemplate>
                                            </ItemsControl.ItemTemplate>
                                        </ItemsControl>
                                        <Button x:Name="TagAddButton" Grid.Column="1" Width="30" MinWidth="30" Height="30" Padding="0" Content="+" FontSize="15" ToolTip="添加标签" Click="TagAddButton_Click"/>
                                    </Grid>
                                </Border>
                            </StackPanel>
                        </Border>

                        <Border Style="{StaticResource SoftwareEditorSection}">
                            <Grid>
                                <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="260"/></Grid.RowDefinitions>
                                <Grid>
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                    <StackPanel><TextBlock Text="下载渠道" Style="{StaticResource AdminSectionTitle}"/><TextBlock Text="先选择渠道,再在右侧编辑详细信息;列表顺序就是用户看到的顺序" Style="{StaticResource AdminSectionSubtitle}"/></StackPanel>
                                    <StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
                                        <Button Content="+ 添加" Margin="0,0,6,0" Click="AddChannelButton_Click"/>
                                        <Button Content="上移" Margin="0,0,6,0" Click="MoveChannelUpButton_Click"/>
                                        <Button Content="下移" Margin="0,0,6,0" Click="MoveChannelDownButton_Click"/>
                                        <Button Content="移除" Click="RemoveChannelButton_Click"/>
                                    </StackPanel>
                                </Grid>
                                <Border Grid.Row="1" Height="1" Background="#E8E8F1" Margin="0,13,0,13"/>
                                <Grid Grid.Row="2">
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="260"/><ColumnDefinition Width="14"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                                    <Border Background="#FAFAFE" BorderBrush="#E2E2ED" BorderThickness="1" CornerRadius="12" Padding="7">
                                        <Grid>
                                            <ListBox x:Name="ChannelList" BorderThickness="0" Background="Transparent" ItemContainerStyle="{StaticResource AdminListBoxItem}" SelectionChanged="ChannelList_SelectionChanged" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                                                <ListBox.ItemTemplate>
                                                    <DataTemplate>
                                                        <Grid>
                                                            <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                                            <StackPanel><TextBlock Text="{Binding Name}" Foreground="#4B4B62" FontSize="10.5" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/><TextBlock Text="{Binding DisplayAddress}" Foreground="#9A9AAC" FontSize="8.8" Margin="0,4,0,0" TextTrimming="CharacterEllipsis"/></StackPanel>
                                                            <Border Grid.Column="1" Style="{StaticResource SoftwareStatusPill}" Margin="8,0,0,0" VerticalAlignment="Center"><TextBlock Text="{Binding ModeLabel}" Foreground="#77778C" FontSize="8.8"/></Border>
                                                        </Grid>
                                                    </DataTemplate>
                                                </ListBox.ItemTemplate>
                                            </ListBox>
                                            <TextBlock x:Name="ChannelEmptyText" Text="暂无渠道,请点击“+ 添加”" Foreground="#9999AB" FontSize="9.5" TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"/>
                                        </Grid>
                                    </Border>
                                    <Border x:Name="ChannelEditorPanel" Grid.Column="2" Background="#FCFCFF" BorderBrush="#E2E2ED" BorderThickness="1" CornerRadius="12" Padding="14">
                                        <Grid>
                                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="11"/><RowDefinition Height="Auto"/><RowDefinition Height="11"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                                            <Grid>
                                                <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="10"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                                                <StackPanel><TextBlock Text="渠道标识 *" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor Style="{StaticResource AdminTextEditor}" HintText="例如 official" Text="{Binding ElementName=ChannelList, Path=SelectedItem.Id, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/></StackPanel>
                                                <StackPanel Grid.Column="2"><TextBlock Text="显示名称 *" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor Style="{StaticResource AdminTextEditor}" HintText="例如 官网" Text="{Binding ElementName=ChannelList, Path=SelectedItem.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/></StackPanel>
                                            </Grid>
                                            <Grid Grid.Row="2">
                                                <Grid.ColumnDefinitions><ColumnDefinition Width="180"/><ColumnDefinition Width="10"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                                                <StackPanel><TextBlock Text="获取方式" Style="{StaticResource AdminFormLabel}"/><ComboBox x:Name="ChannelModeBox" Height="36" DisplayMemberPath="Name" SelectedValuePath="Value" SelectedValue="{Binding ElementName=ChannelList, Path=SelectedItem.Mode, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/></StackPanel>
                                                <StackPanel Grid.Column="2"><TextBlock Text="{Binding ElementName=ChannelList, Path=SelectedItem.AddressLabel}" Style="{StaticResource AdminFormLabel}"/><controls:TextEditor Style="{StaticResource AdminTextEditor}" HintText="{Binding ElementName=ChannelList, Path=SelectedItem.AddressHint}" Text="{Binding ElementName=ChannelList, Path=SelectedItem.DisplayAddress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/></StackPanel>
                                            </Grid>
                                            <Grid Grid.Row="4">
                                                <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                                <StackPanel VerticalAlignment="Center"><CheckBox Content="启用此下载渠道" IsChecked="{Binding ElementName=ChannelList, Path=SelectedItem.Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/><TextBlock Text="{Binding ElementName=ChannelList, Path=SelectedItem.FileMetadata}" Foreground="#A0A0B1" FontSize="8.8" Margin="2,5,0,0" TextTrimming="CharacterEllipsis"/></StackPanel>
                                                <Button x:Name="UploadChannelButton" Grid.Column="1" Content="上传文件到此渠道" controls:ButtonAssist.IsPrimary="True" MinWidth="126" Click="UploadChannelButton_Click"/>
                                            </Grid>
                                        </Grid>
                                    </Border>
                                </Grid>
                            </Grid>
                        </Border>
                    </StackPanel>
                </ScrollViewer>

                <Border Grid.Row="2" Margin="18,8,18,14" Padding="1,11,1,0" BorderBrush="#E6E6F0" BorderThickness="0,1,0,0">
                    <Grid>
                        <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                            <CheckBox x:Name="EnabledCheckBox" Content="可用" IsChecked="True" Margin="0,0,15,0"/>
                            <CheckBox x:Name="PublishedCheckBox" Content="已发布" IsChecked="False" Margin="0,0,15,0"/>
                            <CheckBox x:Name="FeaturedCheckBox" Content="精选"/>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                            <Button x:Name="DeleteButton" Content="删除软件" MinWidth="82" Margin="0,0,7,0" Click="DeleteButton_Click"/>
                            <Button x:Name="PublicationButton" Content="切换发布状态" MinWidth="104" Margin="0,0,7,0" Click="PublicationButton_Click"/>
                            <Button x:Name="SaveButton" Content="保存更改" controls:ButtonAssist.IsPrimary="True" MinWidth="88" Click="SaveButton_Click"/>
                        </StackPanel>
                    </Grid>
                </Border>
            </Grid>
        </controls:RoundedClipBorder>

        <Popup x:Name="CategorySuggestionPopup" PlacementTarget="{Binding ElementName=CategoryAddButton}" Placement="Bottom" StaysOpen="False" AllowsTransparency="True" PopupAnimation="Fade">
            <Border Width="270" MaxHeight="330" Margin="0,5,0,0" Padding="11" Background="White" BorderBrush="#D9D9E9" BorderThickness="1" CornerRadius="12">
                <Border.Effect><DropShadowEffect BlurRadius="18" ShadowDepth="4" Opacity="0.16"/></Border.Effect>
                <StackPanel>
                    <TextBlock Text="已有分类" Foreground="#4C4C62" FontSize="11" FontWeight="SemiBold"/>
                    <TextBlock Text="选择建议,或直接在分类输入框中创建新值" Foreground="#9696A8" FontSize="8.8" Margin="0,3,0,9"/>
                    <ScrollViewer MaxHeight="220" VerticalScrollBarVisibility="Auto">
                        <ItemsControl x:Name="CategorySuggestionItems">
                            <ItemsControl.ItemTemplate><DataTemplate><Button Content="{Binding}" Tag="{Binding}" Style="{StaticResource SuggestionChoiceButton}" Click="CategorySuggestionButton_Click"/></DataTemplate></ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </ScrollViewer>
                    <TextBlock x:Name="CategorySuggestionEmptyText" Text="目录中还没有分类,可直接输入新分类。" Foreground="#9999AB" FontSize="9" TextWrapping="Wrap" Margin="2,4,2,2"/>
                </StackPanel>
            </Border>
        </Popup>

        <Popup x:Name="TagSuggestionPopup" PlacementTarget="{Binding ElementName=TagAddButton}" Placement="Bottom" StaysOpen="False" AllowsTransparency="True" PopupAnimation="Fade">
            <Border Width="300" MaxHeight="380" Margin="0,5,0,0" Padding="11" Background="White" BorderBrush="#D9D9E9" BorderThickness="1" CornerRadius="12">
                <Border.Effect><DropShadowEffect BlurRadius="18" ShadowDepth="4" Opacity="0.16"/></Border.Effect>
                <StackPanel>
                    <TextBlock Text="添加标签" Foreground="#4C4C62" FontSize="11" FontWeight="SemiBold"/>
                    <TextBlock Text="从目录建议中选择,或创建一个新标签" Foreground="#9696A8" FontSize="8.8" Margin="0,3,0,9"/>
                    <ScrollViewer MaxHeight="190" VerticalScrollBarVisibility="Auto">
                        <ItemsControl x:Name="TagSuggestionItems">
                            <ItemsControl.ItemTemplate><DataTemplate><Button Content="{Binding}" Tag="{Binding}" Style="{StaticResource SuggestionChoiceButton}" Click="TagSuggestionButton_Click"/></DataTemplate></ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </ScrollViewer>
                    <TextBlock x:Name="TagSuggestionEmptyText" Text="没有更多已有标签" Foreground="#9999AB" FontSize="9" Margin="2,3,2,8"/>
                    <Grid Margin="0,5,0,0">
                        <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="7"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                        <controls:TextEditor x:Name="CustomTagTextBox" Style="{StaticResource AdminTextEditor}" HintText="输入新标签"/>
                        <Button Grid.Column="2" Content="添加" MinWidth="58" controls:ButtonAssist.IsPrimary="True" Click="AddCustomTagButton_Click"/>
                    </Grid>
                    <TextBlock x:Name="TagValidationText" Foreground="#BC5966" FontSize="8.8" Margin="2,5,0,0" TextWrapping="Wrap"/>
                </StackPanel>
            </Border>
        </Popup>

        <Border Grid.Row="2" Background="#26FFFFFF" BorderBrush="#50FFFFFF" BorderThickness="1" CornerRadius="12" Padding="11,7">
            <StackPanel Orientation="Horizontal">
                <Ellipse Width="7" Height="7" Fill="#A7F2C5" Margin="2,0,8,0" VerticalAlignment="Center"/>
                <TextBlock x:Name="StatusText" Foreground="#ECFFFFFF" FontSize="10" VerticalAlignment="Center" TextWrapping="Wrap"/>
            </StackPanel>
        </Border>
    </Grid>
</Page>