Switch MahApps.Metro base theme from Light.Indigo to Dark.Indigo in App.xaml. Fix hardcoded light-specific colours in all five views: - MainWindow: overlay backgrounds from hardcoded light-blue gradients to ThemeBackground; overlay text updated to ThemeForeground / Gray5 - SingleItemView: listing URL colour from hardcoded #1565C0 (invisible on dark) to Accent brush - PhotoAnalysisView / BulkImportView / SavedListingsView: dynamic resource brushes already used; no structural changes needed Semantic colours (green/red/amber indicators, AI gradient buttons, white text on coloured backgrounds) left unchanged as they read correctly on dark surfaces. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
567 lines
34 KiB
XML
567 lines
34 KiB
XML
<UserControl x:Class="EbayListingTool.Views.SingleItemView"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
|
|
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
|
|
Loaded="UserControl_Loaded">
|
|
|
|
<UserControl.Resources>
|
|
|
|
<!-- Section card — subtle bordered/shaded panel wrapping a group of fields -->
|
|
<Style x:Key="SectionCard" TargetType="Border">
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
<Setter Property="CornerRadius" Value="4"/>
|
|
<Setter Property="Padding" Value="14,12"/>
|
|
<Setter Property="Margin" Value="0,0,0,10"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource MahApps.Brushes.Gray8}"/>
|
|
<Setter Property="Background" Value="{DynamicResource MahApps.Brushes.Gray10}"/>
|
|
</Style>
|
|
|
|
<!-- Upper-case accent section heading used inside each card -->
|
|
<Style x:Key="SectionHeading" TargetType="TextBlock">
|
|
<Setter Property="FontSize" Value="10"/>
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
<Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}"/>
|
|
<Setter Property="Margin" Value="0,0,0,0"/>
|
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
|
</Style>
|
|
|
|
<!-- Standard field label inside a card -->
|
|
<Style x:Key="FieldLabel" TargetType="TextBlock">
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
<Setter Property="FontSize" Value="12"/>
|
|
<Setter Property="Margin" Value="0,0,0,4"/>
|
|
<Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray2}"/>
|
|
</Style>
|
|
|
|
<!-- Small red asterisk for required fields -->
|
|
<Style x:Key="RequiredAsterisk" TargetType="TextBlock">
|
|
<Setter Property="Text" Value=" *"/>
|
|
<Setter Property="FontWeight" Value="Bold"/>
|
|
<Setter Property="FontSize" Value="13"/>
|
|
<Setter Property="Foreground" Value="#E53935"/>
|
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
|
<Setter Property="Margin" Value="0,0,0,4"/>
|
|
<Setter Property="ToolTip" Value="Required"/>
|
|
</Style>
|
|
|
|
<!-- AI buttons: indigo-to-violet gradient, icon + label -->
|
|
<Style x:Key="AiButton" TargetType="Button"
|
|
BasedOn="{StaticResource MahApps.Styles.Button.Square}">
|
|
<Setter Property="Height" Value="28"/>
|
|
<Setter Property="Padding" Value="8,0"/>
|
|
<Setter Property="FontSize" Value="12"/>
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
<Setter Property="Foreground" Value="White"/>
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
<Setter Property="Background">
|
|
<Setter.Value>
|
|
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
|
|
<GradientStop Color="#7C3AED" Offset="0"/>
|
|
<GradientStop Color="#4F46E5" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
</Setter.Value>
|
|
</Setter>
|
|
<Style.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter Property="Background">
|
|
<Setter.Value>
|
|
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
|
|
<GradientStop Color="#8B5CF6" Offset="0"/>
|
|
<GradientStop Color="#6366F1" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Trigger>
|
|
<Trigger Property="IsEnabled" Value="False">
|
|
<Setter Property="Opacity" Value="0.45"/>
|
|
</Trigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
|
|
<!-- Primary post/action button -->
|
|
<Style x:Key="PostButton" TargetType="Button"
|
|
BasedOn="{StaticResource MahApps.Styles.Button.Square.Accent}">
|
|
<Setter Property="Height" Value="36"/>
|
|
<Setter Property="Padding" Value="20,0"/>
|
|
<Setter Property="FontSize" Value="13"/>
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
</Style>
|
|
|
|
</UserControl.Resources>
|
|
|
|
<Grid Margin="16,12,16,12">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="8"/>
|
|
<ColumnDefinition Width="290"/>
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<!-- ================================================================
|
|
LEFT COLUMN — form fields grouped into section cards
|
|
================================================================ -->
|
|
<ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto">
|
|
<StackPanel>
|
|
|
|
<!-- LISTING DETAILS -->
|
|
<Border Style="{StaticResource SectionCard}">
|
|
<StackPanel>
|
|
|
|
<!-- Card header row -->
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,10">
|
|
<iconPacks:PackIconMaterial Kind="TagOutline" Width="13" Height="13"
|
|
Margin="0,0,6,0" VerticalAlignment="Center"
|
|
Foreground="{DynamicResource MahApps.Brushes.Accent}"/>
|
|
<TextBlock Text="LISTING DETAILS" Style="{StaticResource SectionHeading}"/>
|
|
</StackPanel>
|
|
|
|
<!-- Title label row with required asterisk -->
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="Title"/>
|
|
<TextBlock Style="{StaticResource RequiredAsterisk}"/>
|
|
</StackPanel>
|
|
<!-- Title + AI Title button -->
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<TextBox x:Name="TitleBox"
|
|
mah:TextBoxHelper.Watermark="Item title (max 80 characters)"
|
|
MaxLength="80"
|
|
TextChanged="TitleBox_TextChanged"/>
|
|
<Button Grid.Column="1" Margin="6,0,0,0"
|
|
Style="{StaticResource AiButton}"
|
|
Click="AiTitle_Click"
|
|
ToolTip="Ask Claude to write a keyword-rich eBay title based on your item details">
|
|
<StackPanel Orientation="Horizontal">
|
|
<mah:ProgressRing x:Name="TitleSpinner"
|
|
Width="11" Height="11" Margin="0,0,4,0"
|
|
Foreground="White" Visibility="Collapsed"/>
|
|
<iconPacks:PackIconMaterial x:Name="TitleAiIcon"
|
|
Kind="AutoFix" Width="12" Height="12"
|
|
Margin="0,0,4,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="AI Title" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</Button>
|
|
</Grid>
|
|
|
|
<!-- Visual character-count progress bar -->
|
|
<Grid Margin="0,5,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<!-- Track -->
|
|
<Border Grid.Column="0" Height="4" CornerRadius="2"
|
|
Background="{DynamicResource MahApps.Brushes.Gray8}"
|
|
VerticalAlignment="Center" Margin="0,0,8,0">
|
|
<!-- Fill — width set in code-behind via TitleCountBar.Width -->
|
|
<Border x:Name="TitleCountBar" HorizontalAlignment="Left"
|
|
Height="4" CornerRadius="2" Width="0"
|
|
Background="{DynamicResource MahApps.Brushes.Accent}"/>
|
|
</Border>
|
|
<TextBlock x:Name="TitleCount" Grid.Column="1"
|
|
Text="0 / 80" FontSize="10"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray5}"
|
|
VerticalAlignment="Center"/>
|
|
</Grid>
|
|
|
|
<!-- Category label row with required asterisk -->
|
|
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="Category" Margin="0,0,0,4"/>
|
|
<TextBlock Style="{StaticResource RequiredAsterisk}"/>
|
|
</StackPanel>
|
|
<!-- Category search -->
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<TextBox x:Name="CategoryBox"
|
|
mah:TextBoxHelper.Watermark="Start typing to search categories..."
|
|
TextChanged="CategoryBox_TextChanged"
|
|
KeyDown="CategoryBox_KeyDown"/>
|
|
<Border Grid.Column="1" Margin="8,0,0,0" CornerRadius="3"
|
|
Padding="6,2" VerticalAlignment="Center"
|
|
Background="{DynamicResource MahApps.Brushes.Gray8}">
|
|
<TextBlock x:Name="CategoryIdLabel" FontSize="11"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray4}"
|
|
Text="no category"/>
|
|
</Border>
|
|
</Grid>
|
|
<!-- Category dropdown suggestions -->
|
|
<ListBox x:Name="CategorySuggestionsList" MaxHeight="140"
|
|
SelectionChanged="CategorySuggestionsList_SelectionChanged"
|
|
Visibility="Collapsed" Margin="0,2,0,0"
|
|
Background="{DynamicResource MahApps.Brushes.Gray9}"
|
|
BorderBrush="{DynamicResource MahApps.Brushes.Gray7}"
|
|
BorderThickness="1">
|
|
<ListBox.ItemTemplate>
|
|
<DataTemplate>
|
|
<TextBlock Text="{Binding CategoryPath}" FontSize="12" Padding="4,3"/>
|
|
</DataTemplate>
|
|
</ListBox.ItemTemplate>
|
|
</ListBox>
|
|
|
|
<!-- Condition + Format -->
|
|
<Grid Margin="0,10,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="12"/>
|
|
<ColumnDefinition Width="*"/>
|
|
</Grid.ColumnDefinitions>
|
|
<StackPanel Grid.Column="0">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="Condition"/>
|
|
<ComboBox x:Name="ConditionBox"
|
|
SelectionChanged="ConditionBox_SelectionChanged">
|
|
<ComboBoxItem Content="New" Tag="New"
|
|
ToolTip="Brand new, unopened (eBay: New)"/>
|
|
<ComboBoxItem Content="Open Box" Tag="OpenBox"
|
|
ToolTip="Opened but unused (eBay: Open box)"/>
|
|
<ComboBoxItem Content="Refurbished" Tag="Refurbished"
|
|
ToolTip="Professionally restored (eBay: Seller refurbished)"/>
|
|
<ComboBoxItem Content="Used" Tag="Used" IsSelected="True"
|
|
ToolTip="Previously used, working (eBay: Used)"/>
|
|
<ComboBoxItem Content="For Parts / Not Working" Tag="ForParts"
|
|
ToolTip="Not fully working (eBay: For parts or not working)"/>
|
|
</ComboBox>
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="2">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="Format"/>
|
|
<ComboBox x:Name="FormatBox">
|
|
<ComboBoxItem Content="Buy It Now" IsSelected="True"/>
|
|
<ComboBoxItem Content="Auction"/>
|
|
</ComboBox>
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- DESCRIPTION -->
|
|
<Border Style="{StaticResource SectionCard}">
|
|
<StackPanel>
|
|
<Grid Margin="0,0,0,10">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<StackPanel Orientation="Horizontal">
|
|
<iconPacks:PackIconMaterial Kind="TextBox" Width="13" Height="13"
|
|
Margin="0,0,6,0" VerticalAlignment="Center"
|
|
Foreground="{DynamicResource MahApps.Brushes.Accent}"/>
|
|
<TextBlock Text="DESCRIPTION" Style="{StaticResource SectionHeading}"/>
|
|
</StackPanel>
|
|
<Button Grid.Column="1" Style="{StaticResource AiButton}"
|
|
Click="AiDescription_Click"
|
|
ToolTip="Ask Claude to write a full product description">
|
|
<StackPanel Orientation="Horizontal">
|
|
<mah:ProgressRing x:Name="DescSpinner"
|
|
Width="11" Height="11" Margin="0,0,4,0"
|
|
Foreground="White" Visibility="Collapsed"/>
|
|
<iconPacks:PackIconMaterial x:Name="DescAiIcon"
|
|
Kind="AutoFix" Width="12" Height="12"
|
|
Margin="0,0,4,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="AI Description" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</Button>
|
|
</Grid>
|
|
<TextBox x:Name="DescriptionBox" Height="150" AcceptsReturn="True"
|
|
TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"
|
|
mah:TextBoxHelper.Watermark="Describe the item, condition, what's included..."
|
|
Style="{DynamicResource MahApps.Styles.TextBox}"
|
|
TextChanged="DescriptionBox_TextChanged"/>
|
|
|
|
<!-- Description character count progress bar (soft limit 2000) -->
|
|
<Grid Margin="0,5,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<Border Grid.Column="0" Height="4" CornerRadius="2"
|
|
Background="{DynamicResource MahApps.Brushes.Gray8}"
|
|
VerticalAlignment="Center" Margin="0,0,8,0">
|
|
<Border x:Name="DescCountBar" HorizontalAlignment="Left"
|
|
Height="4" CornerRadius="2" Width="0"
|
|
Background="{DynamicResource MahApps.Brushes.Accent}"/>
|
|
</Border>
|
|
<TextBlock x:Name="DescCount" Grid.Column="1"
|
|
Text="0 / 2000" FontSize="10"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray5}"
|
|
VerticalAlignment="Center"/>
|
|
</Grid>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- PRICING & LOGISTICS -->
|
|
<Border Style="{StaticResource SectionCard}">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,10">
|
|
<iconPacks:PackIconMaterial Kind="CurrencyGbp" Width="13" Height="13"
|
|
Margin="0,0,6,0" VerticalAlignment="Center"
|
|
Foreground="{DynamicResource MahApps.Brushes.Accent}"/>
|
|
<TextBlock Text="PRICING & LOGISTICS" Style="{StaticResource SectionHeading}"/>
|
|
</StackPanel>
|
|
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="12"/>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="12"/>
|
|
<ColumnDefinition Width="*"/>
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<!-- Price with inline AI button -->
|
|
<StackPanel Grid.Column="0">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<TextBlock Grid.Column="0" Style="{StaticResource FieldLabel}" Text="Price (£)"/>
|
|
<TextBlock Grid.Column="1" Style="{StaticResource RequiredAsterisk}"/>
|
|
<Button Grid.Column="3" Style="{StaticResource AiButton}"
|
|
Click="AiPrice_Click"
|
|
Height="22" Padding="6,0" FontSize="11"
|
|
Margin="4,0,0,4"
|
|
ToolTip="Ask Claude to suggest a competitive eBay UK price">
|
|
<StackPanel Orientation="Horizontal">
|
|
<mah:ProgressRing x:Name="PriceSpinner"
|
|
Width="9" Height="9" Margin="0,0,3,0"
|
|
Foreground="White" Visibility="Collapsed"/>
|
|
<iconPacks:PackIconMaterial x:Name="PriceAiIcon"
|
|
Kind="AutoFix" Width="10" Height="10"
|
|
Margin="0,0,3,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="AI Price" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</Button>
|
|
</Grid>
|
|
<mah:NumericUpDown x:Name="PriceBox" Minimum="0" Maximum="99999"
|
|
StringFormat="F2" Interval="0.5" Value="0"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Grid.Column="2">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="Quantity"/>
|
|
<mah:NumericUpDown x:Name="QuantityBox" Minimum="1" Maximum="999"
|
|
Value="1" StringFormat="0"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Grid.Column="4">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="Postage"/>
|
|
<ComboBox x:Name="PostageBox">
|
|
<ComboBoxItem Content="Royal Mail 1st Class (~£1.55)" IsSelected="True"/>
|
|
<ComboBoxItem Content="Royal Mail 2nd Class (~£1.20)"/>
|
|
<ComboBoxItem Content="Royal Mail Tracked 24 (~£2.90)"/>
|
|
<ComboBoxItem Content="Royal Mail Tracked 48 (~£2.60)"/>
|
|
<ComboBoxItem Content="Free Postage"/>
|
|
<ComboBoxItem Content="Collection Only"/>
|
|
</ComboBox>
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
<!-- Postcode — narrower input, left-aligned -->
|
|
<StackPanel Margin="0,10,0,0">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="Item Postcode"/>
|
|
<TextBox x:Name="PostcodeBox"
|
|
mah:TextBoxHelper.Watermark="e.g. NR1 1AA"
|
|
MaxLength="10" Width="150"
|
|
HorizontalAlignment="Left"/>
|
|
</StackPanel>
|
|
|
|
<!-- AI price suggestion result -->
|
|
<Border x:Name="PriceSuggestionPanel" Visibility="Collapsed"
|
|
CornerRadius="4" Margin="0,12,0,0" Padding="12,10"
|
|
Background="#1A7C3AED"
|
|
BorderBrush="#7C3AED" BorderThickness="1">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,6">
|
|
<iconPacks:PackIconMaterial Kind="AutoFix" Width="13" Height="13"
|
|
Margin="0,0,6,0" VerticalAlignment="Center"
|
|
Foreground="#7C3AED"/>
|
|
<TextBlock Text="AI Price Suggestion" FontWeight="Bold"
|
|
FontSize="12" Foreground="#7C3AED"/>
|
|
</StackPanel>
|
|
<TextBlock x:Name="PriceSuggestionText" TextWrapping="Wrap"
|
|
FontSize="12" Margin="0,0,0,8"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray2}"/>
|
|
<Button Content="Use this price" HorizontalAlignment="Left"
|
|
Click="UseSuggestedPrice_Click"
|
|
Style="{StaticResource AiButton}"
|
|
Height="26" Padding="10,0" FontSize="11"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- ACTION BUTTONS -->
|
|
<StackPanel Orientation="Horizontal" Margin="0,2,0,8">
|
|
<!-- Post: primary accent + spinner overlay -->
|
|
<Button x:Name="PostBtn" Style="{StaticResource PostButton}"
|
|
Click="PostListing_Click">
|
|
<StackPanel Orientation="Horizontal">
|
|
<mah:ProgressRing x:Name="PostSpinner"
|
|
Width="14" Height="14" Margin="0,0,6,0"
|
|
Foreground="White" Visibility="Collapsed"/>
|
|
<iconPacks:PackIconMaterial x:Name="PostIcon"
|
|
Kind="Send" Width="14" Height="14"
|
|
Margin="0,0,6,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="Post to eBay" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</Button>
|
|
<Button x:Name="SaveDraftBtn" Content="Save Draft"
|
|
Margin="8,0,0,0" Click="SaveDraft_Click"
|
|
Style="{DynamicResource MahApps.Styles.Button.Square}"
|
|
Height="36" Padding="14,0" FontSize="13"/>
|
|
<Button x:Name="NewListingBtn" Margin="8,0,0,0" Click="NewListing_Click"
|
|
Style="{DynamicResource MahApps.Styles.Button.Square}"
|
|
Height="36" Padding="14,0" FontSize="13">
|
|
<StackPanel Orientation="Horizontal">
|
|
<iconPacks:PackIconMaterial Kind="Refresh" Width="13" Height="13"
|
|
Margin="0,0,5,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="Clear" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</Button>
|
|
</StackPanel>
|
|
|
|
<!-- Posted success banner -->
|
|
<Border x:Name="SuccessPanel" Visibility="Collapsed"
|
|
CornerRadius="4" Padding="14,10"
|
|
Background="#1A4CAF50" BorderBrush="#4CAF50" BorderThickness="1">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal">
|
|
<iconPacks:PackIconMaterial Kind="CheckCircle" Width="16" Height="16"
|
|
Margin="0,0,8,0" VerticalAlignment="Center"
|
|
Foreground="#4CAF50"/>
|
|
<TextBlock Text="Posted! " FontWeight="Bold" VerticalAlignment="Center"
|
|
Foreground="#4CAF50"/>
|
|
<TextBlock x:Name="ListingUrlText" Foreground="{DynamicResource MahApps.Brushes.Accent}"
|
|
VerticalAlignment="Center"
|
|
Cursor="Hand" TextDecorations="Underline"
|
|
MouseLeftButtonUp="ListingUrl_Click"/>
|
|
</StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,8,0,0">
|
|
<Button Content="Copy URL" Height="24" Padding="8,0" FontSize="11"
|
|
Click="CopyUrl_Click"
|
|
Style="{DynamicResource MahApps.Styles.Button.Square}"
|
|
ToolTip="Copy listing URL to clipboard"/>
|
|
<Button Content="Copy Title" Height="24" Padding="8,0" FontSize="11"
|
|
Margin="6,0,0,0" Click="CopyTitle_Click"
|
|
Style="{DynamicResource MahApps.Styles.Button.Square}"
|
|
ToolTip="Copy listing title to clipboard"/>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
|
|
<!-- ================================================================
|
|
RIGHT COLUMN — photos panel
|
|
================================================================ -->
|
|
<Grid Grid.Column="2">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto"/>
|
|
<RowDefinition Height="*"/>
|
|
<RowDefinition Height="Auto"/>
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Header: label + count badge -->
|
|
<Grid Grid.Row="0" Margin="0,0,0,8">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<StackPanel Orientation="Horizontal">
|
|
<iconPacks:PackIconMaterial Kind="ImageMultiple" Width="13" Height="13"
|
|
Margin="0,0,6,0" VerticalAlignment="Center"
|
|
Foreground="{DynamicResource MahApps.Brushes.Accent}"/>
|
|
<TextBlock Text="PHOTOS" Style="{StaticResource SectionHeading}"/>
|
|
</StackPanel>
|
|
<!-- Photo count badge -->
|
|
<Border Grid.Column="1" CornerRadius="10" Padding="8,2"
|
|
Background="{DynamicResource MahApps.Brushes.Gray8}">
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock x:Name="PhotoCountBadge" Text="0"
|
|
FontSize="12" FontWeight="Bold"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray2}"/>
|
|
<TextBlock Text=" / 12" FontSize="12"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray5}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
</Grid>
|
|
|
|
<!-- Drop zone with dashed border, hover highlight -->
|
|
<Border Grid.Row="1"
|
|
x:Name="DropZone"
|
|
BorderBrush="{DynamicResource MahApps.Brushes.Gray7}"
|
|
BorderThickness="2" CornerRadius="4"
|
|
MinHeight="220"
|
|
AllowDrop="True" Drop="Photos_Drop" DragOver="Photos_DragOver"
|
|
DragEnter="DropZone_DragEnter" DragLeave="DropZone_DragLeave"
|
|
Background="{DynamicResource MahApps.Brushes.Gray10}">
|
|
<Border.Resources>
|
|
<!-- Dashed border via VisualBrush trickery is complex in WPF;
|
|
we use a solid thin border with hover accent colour instead -->
|
|
</Border.Resources>
|
|
<Grid>
|
|
<!-- Empty-state hint (hidden once photos added) -->
|
|
<StackPanel x:Name="DropHint" VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
IsHitTestVisible="False">
|
|
<iconPacks:PackIconMaterial Kind="ImagePlus"
|
|
Width="40" Height="40"
|
|
Margin="0,0,0,8"
|
|
HorizontalAlignment="Center"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray7}"/>
|
|
<TextBlock Text="Drag & drop photos here"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray5}"
|
|
FontSize="12" HorizontalAlignment="Center"/>
|
|
<TextBlock Text="or use Browse below"
|
|
Foreground="{DynamicResource MahApps.Brushes.Gray7}"
|
|
FontSize="11" HorizontalAlignment="Center" Margin="0,3,0,0"/>
|
|
</StackPanel>
|
|
|
|
<!-- Thumbnails: each built in code-behind as a Grid with hover X overlay -->
|
|
<ScrollViewer VerticalScrollBarVisibility="Auto"
|
|
HorizontalScrollBarVisibility="Disabled">
|
|
<WrapPanel x:Name="PhotosPanel" Margin="6"/>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!-- Browse / Clear actions -->
|
|
<Grid Grid.Row="2" Margin="0,8,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="8"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<Button Grid.Column="0" Click="BrowsePhotos_Click"
|
|
Style="{DynamicResource MahApps.Styles.Button.Square.Accent}"
|
|
Height="30">
|
|
<StackPanel Orientation="Horizontal">
|
|
<iconPacks:PackIconMaterial Kind="FolderImage" Width="13" Height="13"
|
|
Margin="0,0,5,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="Browse..." VerticalAlignment="Center" FontSize="12"/>
|
|
</StackPanel>
|
|
</Button>
|
|
<Button Grid.Column="2" Click="ClearPhotos_Click"
|
|
Style="{DynamicResource MahApps.Styles.Button.Square}"
|
|
Height="30" Padding="10,0">
|
|
<StackPanel Orientation="Horizontal">
|
|
<iconPacks:PackIconMaterial Kind="TrashCanOutline" Width="13" Height="13"
|
|
Margin="0,0,5,0" VerticalAlignment="Center"/>
|
|
<TextBlock Text="Clear" VerticalAlignment="Center" FontSize="12"/>
|
|
</StackPanel>
|
|
</Button>
|
|
</Grid>
|
|
</Grid>
|
|
|
|
</Grid>
|
|
</UserControl>
|