<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>
<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>