Files
Mimante/Mimante/MainWindow.xaml
Alberto Balbo 717dc44b3b Aggiornamento alla versione 3.0.0
- Rimosse funzionalità legacy legate a WebView2.
- Introdotto uno stile globale per i pulsanti.
- Semplificata l'interfaccia con gestione tramite griglia unica.
- Aggiunti comandi per avviare, mettere in pausa e fermare aste.
- Introdotta gestione manuale dei cookie tramite dialog.
- Aggiunti dialog per configurare sessione e aggiungere aste.
- Migliorata la persistenza con salvataggio sicuro (DPAPI).
- Rifattorizzate statistiche per utilizzare `BidHistory` e `BidderStats`.
- Ottimizzato il polling per ridurre il carico di sistema.
- Aggiornata esportazione CSV con dati più dettagliati.
- Introdotti nuovi modelli dati per utente e banner aste.
- Rimossi file di test manuale e codice obsoleto.
- Aggiornata documentazione per riflettere le modifiche.
- Aggiunta nuova icona dell'applicazione.
- Migliorata la sicurezza eliminando il salvataggio in chiaro dei cookie.
2025-10-28 12:45:08 +01:00

515 lines
36 KiB
XML

<Window x:Class="AutoBidder.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="AutoBidder v3.0" Height="800" Width="1400"
Background="#0a0a0a" Foreground="#FFFFFF"
WindowStartupLocation="CenterScreen"
Icon="pack://application:,,,/Icon/favicon.ico">
<Window.Resources>
<!-- Stile pulsanti stile vecchia versione -->
<Style x:Key="MainButtonStyle" TargetType="Button">
<Setter Property="Foreground" Value="White" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="14" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
CornerRadius="8"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Grid action button styles (enable/opacity based on auction state) -->
<Style x:Key="GridStartButtonStyle" TargetType="Button" BasedOn="{StaticResource SmallButtonStyle}">
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Opacity" Value="1" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsActive}" Value="True" />
<Condition Binding="{Binding IsPaused}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Opacity" Value="0.5" />
</MultiDataTrigger>
<Trigger Property="IsEnabled" Value="False">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:0.15" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.15" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="GridPauseButtonStyle" TargetType="Button" BasedOn="{StaticResource SmallButtonStyle}">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Opacity" Value="0.5" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsActive}" Value="True" />
<Condition Binding="{Binding IsPaused}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Opacity" Value="1" />
</MultiDataTrigger>
<Trigger Property="IsEnabled" Value="False">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:0.15" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.15" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="GridStopButtonStyle" TargetType="Button" BasedOn="{StaticResource SmallButtonStyle}">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Opacity" Value="0.5" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsActive}" Value="True">
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Opacity" Value="1" />
</DataTrigger>
<Trigger Property="IsEnabled" Value="False">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:0.15" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.15" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="GridManualBidButtonStyle" TargetType="Button" BasedOn="{StaticResource SmallButtonStyle}">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Opacity" Value="0.5" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsActive}" Value="True" />
<Condition Binding="{Binding IsPaused}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Opacity" Value="1" />
</MultiDataTrigger>
<Trigger Property="IsEnabled" Value="False">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:0.15" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.15" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Margin="12" Background="#0a0a0a">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="8" />
<RowDefinition Height="*" MinHeight="200" />
</Grid.RowDefinitions>
<!-- Header Compatto -->
<Border Grid.Row="0" Background="#1a1a1a" Padding="12" CornerRadius="8" Margin="0,0,0,12">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- Sinistra: Utente, Puntate, Aste da confermare -->
<StackPanel Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal" Margin="0,0,0,2">
<TextBlock Text="Utente: " FontSize="14" Foreground="#00CC66" FontWeight="Bold" />
<TextBlock x:Name="UsernameText" Text="Non configurato" FontSize="14" FontWeight="Bold" Foreground="#00CC66" Width="160" TextTrimming="CharacterEllipsis" />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,2">
<TextBlock Text="Puntate: " FontSize="14" Foreground="#666" FontWeight="Bold" />
<TextBlock x:Name="RemainingBidsText" Text="--" FontSize="14" FontWeight="Bold" Foreground="#0099FF" Width="80" TextTrimming="CharacterEllipsis" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Aste vinte da confermare: " FontSize="14" Foreground="#FF9933" FontWeight="Bold" />
<TextBlock x:Name="BannerAsteDaRiscattare" Text="--" FontSize="14" Foreground="#FF9933" FontWeight="Bold" Width="40" TextTrimming="CharacterEllipsis" />
</StackPanel>
</StackPanel>
<!-- Destra: Pulsanti globali -->
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Button x:Name="ConfigSessionButton" Content="Configura" Click="ConfigSessionButton_Click"
Style="{StaticResource SmallButtonStyle}"
Background="#8B5CF6" Padding="20,10" Margin="0,0,6,0" Height="40" MinWidth="110" />
<Button x:Name="StartButton" Content="Avvia Tutti" Command="{Binding StartAllCommand}" IsEnabled="False"
Style="{StaticResource SmallButtonStyle}"
Background="#00CC66" Padding="20,10" Margin="0,0,6,0" Height="40" MinWidth="110" />
<Button x:Name="PauseAllButton" Content="Pausa Tutti" Command="{Binding PauseAllCommand}" IsEnabled="True"
Style="{StaticResource SmallButtonStyle}"
Background="#FF9933" Padding="20,10" Margin="0,0,6,0" Height="40" MinWidth="110" />
<Button x:Name="StopButton" Content="Ferma Tutti" Command="{Binding StopAllCommand}" IsEnabled="False"
Style="{StaticResource SmallButtonStyle}"
Background="#CC0000" Padding="20,10" Opacity="0.5" Height="40" MinWidth="110" />
</StackPanel>
</Grid>
</Border>
<!-- Riga vuota (toolbar rimossa) -->
<Grid Grid.Row="1" Height="0" />
<!-- Griglia Aste + Log -->
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="8" />
<ColumnDefinition Width="*" MinWidth="200" />
</Grid.ColumnDefinitions>
<!-- Box Aste Monitorate -->
<Border Grid.Column="0" Background="#1a1a1a" Padding="12" CornerRadius="6" BorderBrush="#333333" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Header con titolo e pulsanti -->
<Grid Grid.Row="0" Margin="0,0,0,12">
<TextBlock x:Name="MonitorateTitle" Text="Aste monitorate: 0" FontSize="14" FontWeight="Bold" Foreground="#00CC66" VerticalAlignment="Center" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Name="AddUrlButton" Content="+ Aggiungi" Click="AddUrlButton_Click"
Style="{StaticResource SmallButtonStyle}"
Background="#00CC66" Padding="12,6" Margin="0,0,6,0" Height="28" MinWidth="80" FontSize="11" />
<Button x:Name="RemoveUrlButton" Content="- Rimuovi" Click="RemoveUrlButton_Click"
Style="{StaticResource SmallButtonStyle}"
Background="#CC0000" Padding="12,6" Height="28" MinWidth="80" FontSize="11" />
</StackPanel>
</Grid>
<!-- Griglia Aste -->
<DataGrid x:Name="MultiAuctionsGrid" Grid.Row="1" AutoGenerateColumns="False"
Background="#1a1a1a" Foreground="#FFFFFF" SelectionChanged="MultiAuctionsGrid_SelectionChanged"
BorderBrush="#333333" BorderThickness="1" GridLinesVisibility="Horizontal"
HorizontalGridLinesBrush="#333333" RowBackground="#1a1a1a" AlternatingRowBackground="#222222">
<DataGrid.Resources>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="#2a2a2a" />
<Setter Property="Foreground" Value="#FFFFFF" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Padding" Value="10,8" />
<Setter Property="BorderThickness" Value="0,0,0,2" />
<Setter Property="BorderBrush" Value="#00CC66" />
</Style>
<Style TargetType="DataGridRow">
<Setter Property="Height" Value="36" />
<Style.Triggers>
<!-- Colore basato sullo stato dell'asta -->
<DataTrigger Binding="{Binding StatusDisplay}" Value="VINTA">
<Setter Property="Background" Value="#1B5E20" />
<Setter Property="Foreground" Value="#FFFFFF" />
</DataTrigger>
<DataTrigger Binding="{Binding StatusDisplay}" Value="Persa">
<Setter Property="Background" Value="#B71C1C" />
<Setter Property="Foreground" Value="#FFFFFF" />
</DataTrigger>
<DataTrigger Binding="{Binding StatusDisplay}" Value="In Corso">
<Setter Property="Background" Value="#1a1a1a" />
</DataTrigger>
<DataTrigger Binding="{Binding StatusDisplay}" Value="Inizia presto">
<Setter Property="Background" Value="#FF6F00" />
<Setter Property="Foreground" Value="#FFFFFF" />
</DataTrigger>
<DataTrigger Binding="{Binding StatusDisplay}" Value="Programmata">
<Setter Property="Background" Value="#424242" />
<Setter Property="Foreground" Value="#AAAAAA" />
</DataTrigger>
<!-- Override quando selezionata -->
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#0099FF" />
<Setter Property="Foreground" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Padding" Value="10,6" />
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Asta" Binding="{Binding Name, Mode=OneWay}" Width="2*" IsReadOnly="True" />
<DataGridTextColumn Header="Latenza (ms)" Binding="{Binding AuctionInfo.PollingLatencyMs, Mode=OneWay}" Width="80" IsReadOnly="True" />
<DataGridTextColumn Header="Stato" Binding="{Binding StatusDisplay, Mode=OneWay}" Width="90" IsReadOnly="True" />
<DataGridTextColumn Header="Timer" Binding="{Binding TimerDisplay, Mode=OneWay}" Width="70" IsReadOnly="True" />
<DataGridTextColumn Header="Prezzo" Binding="{Binding PriceDisplay, Mode=OneWay}" Width="85" IsReadOnly="True" />
<DataGridTextColumn Header="Ultimo" Binding="{Binding LastBidder, Mode=OneWay}" Width="100" IsReadOnly="True" />
<DataGridTextColumn Header="Clicks" Binding="{Binding MyClicks, Mode=OneWay}" Width="60" IsReadOnly="True" />
<DataGridTextColumn Header="Resets" Binding="{Binding ResetCount, Mode=OneWay}" Width="60" IsReadOnly="True" />
<DataGridTemplateColumn Header="Azioni" Width="260">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Avvia" Command="{Binding DataContext.GridStartCommand, RelativeSource={RelativeSource AncestorType=Window}}" CommandParameter="{Binding}" Style="{StaticResource GridStartButtonStyle}" Background="#00CC66" Padding="6,2" MinWidth="40" Margin="0,0,4,0" />
<Button Content="Pausa" Command="{Binding DataContext.GridPauseCommand, RelativeSource={RelativeSource AncestorType=Window}}" CommandParameter="{Binding}" Style="{StaticResource GridPauseButtonStyle}" Background="#FF9933" Padding="6,2" MinWidth="40" Margin="0,0,4,0" />
<Button Content="Ferma" Command="{Binding DataContext.GridStopCommand, RelativeSource={RelativeSource AncestorType=Window}}" CommandParameter="{Binding}" Style="{StaticResource GridStopButtonStyle}" Background="#CC0000" Padding="6,2" MinWidth="40" Margin="0,0,4,0" />
<Button Content="Punta" Command="{Binding DataContext.GridBidCommand, RelativeSource={RelativeSource AncestorType=Window}}" CommandParameter="{Binding}" Style="{StaticResource GridManualBidButtonStyle}" Background="#8B5CF6" Padding="6,2" MinWidth="40" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Border>
<GridSplitter Grid.Column="1" Width="8" HorizontalAlignment="Stretch" Background="#333333" />
<!-- Log Globale -->
<Border Grid.Column="2" Background="#1a1a1a" Padding="12" CornerRadius="6" BorderBrush="#333333" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Log Globale" FontWeight="Bold" Margin="0,0,0,10" FontSize="14" Foreground="#00CC66" />
<RichTextBox x:Name="LogBox" Grid.Row="1" IsReadOnly="True" VerticalScrollBarVisibility="Auto"
Background="#0f0f0f" Foreground="#CCCCCC" Padding="8"
FontFamily="Consolas" FontSize="11" BorderBrush="#333333" BorderThickness="1" />
<Button x:Name="ClearGlobalLogButton" Grid.Row="2" Content="Pulisci Log" Click="ClearGlobalLogButton_Click"
Style="{StaticResource SmallButtonStyle}" IsEnabled="True"
Background="#666" Padding="10,8" Height="32" FontSize="11" Margin="0,8,0,0" HorizontalAlignment="Stretch" />
</Grid>
</Border>
</Grid>
<GridSplitter Grid.Row="3" Height="8" HorizontalAlignment="Stretch" Background="#333333" />
<!-- Dettagli Asta Selezionata - 3 Pannelli Affiancati -->
<Border Grid.Row="4" Background="#1a1a1a" Padding="8" CornerRadius="6" BorderBrush="#333333" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="250" />
<ColumnDefinition Width="4" />
<ColumnDefinition Width="*" MinWidth="200" />
<ColumnDefinition Width="4" />
<ColumnDefinition Width="*" MinWidth="200" />
</Grid.ColumnDefinitions>
<!-- PANNELLO 1: Impostazioni Asta -->
<Border Grid.Column="0" Background="#0f0f0f" Padding="12" CornerRadius="6" BorderBrush="#333333" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- Header -->
<Grid Grid.Row="0" Margin="0,0,0,12">
<TextBlock Text="Impostazioni" FontSize="13" FontWeight="Bold" Foreground="#00CC66" VerticalAlignment="Center" />
</Grid>
<!-- Nome Asta -->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<StackPanel>
<TextBlock x:Name="SelectedAuctionName" Text="Seleziona un'asta dalla griglia"
FontSize="12" FontWeight="SemiBold" Foreground="#FFFFFF" TextWrapping="Wrap" Margin="0,0,0,16" />
<!-- Link asta e pulsanti -->
<Grid Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox x:Name="SelectedAuctionUrl" Text="" IsReadOnly="True" MinWidth="220" Margin="0,0,8,0" VerticalAlignment="Center" Background="#181818" Foreground="#00CCFF" BorderBrush="#333" BorderThickness="1" FontSize="11" Grid.Column="0" HorizontalAlignment="Stretch" />
<Button Content="Apri" x:Name="OpenAuctionButton" Click="GridOpenAuction_Click" Style="{StaticResource SmallButtonStyle}" Background="#0099FF" Padding="10,6" Margin="0,0,4,0" Height="28" MinWidth="60" FontSize="11" Grid.Column="1" />
<Button Content="Copia" x:Name="CopyAuctionUrlButton" Click="CopyAuctionUrlButton_Click" Style="{StaticResource SmallButtonStyle}" Background="#666" Padding="10,6" Height="28" MinWidth="60" FontSize="11" Grid.Column="2" />
</Grid>
<UniformGrid Columns="2" Margin="0,0,0,8">
<StackPanel Margin="0,0,4,0">
<TextBlock Text="Timer (s)" FontSize="10" Margin="0,0,0,4" Foreground="#999" />
<TextBox x:Name="SelectedTimerClick" Text="0" TextChanged="SelectedTimerClick_TextChanged"
Background="#1a1a1a" Foreground="#FFF" Padding="8" FontSize="12" BorderBrush="#444" BorderThickness="1" />
</StackPanel>
<StackPanel Margin="4,0,0,0">
<TextBlock Text="Delay (ms)" FontSize="10" Margin="0,0,0,4" Foreground="#999" />
<TextBox x:Name="SelectedDelayMs" Text="50" TextChanged="SelectedDelayMs_TextChanged"
Background="#1a1a1a" Foreground="#FFF" Padding="8" FontSize="12" BorderBrush="#444" BorderThickness="1" />
</StackPanel>
</UniformGrid>
<UniformGrid Columns="2" Margin="0,0,0,8">
<StackPanel Margin="0,0,4,0">
<TextBlock Text="Min EUR" FontSize="10" Margin="0,0,0,4" Foreground="#999" />
<TextBox x:Name="SelectedMinPrice" Text="0" TextChanged="SelectedMinPrice_TextChanged"
Background="#1a1a1a" Foreground="#FFF" Padding="8" FontSize="12" BorderBrush="#444" BorderThickness="1" />
</StackPanel>
<StackPanel Margin="4,0,0,0">
<TextBlock Text="Max EUR" FontSize="10" Margin="0,0,0,4" Foreground="#999" />
<TextBox x:Name="SelectedMaxPrice" Text="0" TextChanged="SelectedMaxPrice_TextChanged"
Background="#1a1a1a" Foreground="#FFF" Padding="8" FontSize="12" BorderBrush="#444" BorderThickness="1" />
</StackPanel>
</UniformGrid>
<UniformGrid Columns="2" Margin="0,0,0,12">
<StackPanel Margin="0,0,4,0">
<TextBlock Text="Min Resets" FontSize="10" Margin="0,0,0,4" Foreground="#999" />
<TextBox x:Name="SelectedMinResets" Text="0" TextChanged="SelectedMinResets_TextChanged"
Background="#1a1a1a" Foreground="#FFF" Padding="8" FontSize="12" BorderBrush="#444" BorderThickness="1" />
</StackPanel>
<StackPanel Margin="4,0,0,0">
<TextBlock Text="Max Resets (0=inf)" FontSize="10" Margin="0,0,0,4" Foreground="#999" />
<TextBox x:Name="SelectedMaxResets" Text="0" TextChanged="SelectedMaxResets_TextChanged"
Background="#1a1a1a" Foreground="#FFF" Padding="8" FontSize="12" BorderBrush="#444" BorderThickness="1" />
</StackPanel>
</UniformGrid>
<UniformGrid Columns="2" Margin="0,0,0,12">
<StackPanel Margin="0,0,4,0">
<TextBlock Text="Max Clicks (0=inf)" FontSize="10" Margin="0,0,0,4" Foreground="#999" />
<TextBox x:Name="SelectedMaxClicks" Text="{Binding MaxClicks, Mode=TwoWay}" Background="#1a1a1a" Foreground="#FFF" Padding="8" FontSize="12" BorderBrush="#444" BorderThickness="1" />
</StackPanel>
<StackPanel />
</UniformGrid>
</StackPanel>
</ScrollViewer>
<!-- Reset Button -->
<Button Grid.Row="2" x:Name="ResetSettingsButton" Content="Reset Impostazioni" Click="ResetSettingsButton_Click"
Style="{StaticResource SmallButtonStyle}" IsEnabled="False"
Background="#666" Padding="10,8" Height="32" FontSize="11" Margin="0,8,0,0" />
</Grid>
</Border>
<GridSplitter Grid.Column="1" Width="4" HorizontalAlignment="Stretch" Background="#333333" />
<!-- PANNELLO 2: Utenti -->
<Border Grid.Column="2" Background="#0f0f0f" Padding="12" CornerRadius="6" BorderBrush="#333333" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10">
<TextBlock Text="Utenti: " FontSize="13" FontWeight="Bold" Foreground="#00CC66" />
<TextBlock x:Name="SelectedAuctionBiddersCount" Text="0" FontWeight="Bold" Foreground="#FFF" FontSize="13" />
</StackPanel>
<DataGrid x:Name="SelectedAuctionBiddersGrid" Grid.Row="1" AutoGenerateColumns="False"
Background="#1a1a1a" Foreground="#FFFFFF" BorderBrush="#333333" BorderThickness="1"
GridLinesVisibility="Horizontal" HorizontalGridLinesBrush="#333333"
RowBackground="#1a1a1a" AlternatingRowBackground="#222222"
IsReadOnly="True" SelectionMode="Single">
<DataGrid.Resources>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="#2a2a2a" />
<Setter Property="Foreground" Value="#FFFFFF" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Padding" Value="8,6" />
<Setter Property="BorderThickness" Value="0,0,0,2" />
<Setter Property="BorderBrush" Value="#00CC66" />
<Setter Property="FontSize" Value="11" />
</Style>
<Style TargetType="DataGridRow">
<Setter Property="Height" Value="28" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#0099FF" />
<Setter Property="Foreground" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Padding" Value="8,4" />
<Setter Property="FontSize" Value="11" />
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Utente" Binding="{Binding Username}" Width="*" />
<DataGridTextColumn Header="Punt." Binding="{Binding BidCount}" Width="50" />
<DataGridTextColumn Header="Ultima" Binding="{Binding LastBidTimeDisplay}" Width="60" />
</DataGrid.Columns>
</DataGrid>
<Button Grid.Row="2" x:Name="ClearBiddersButton" Content="Pulisci" Click="ClearBiddersButton_Click"
Style="{StaticResource SmallButtonStyle}" IsEnabled="False"
Background="#666" Padding="10,8" Height="32" FontSize="11" Margin="0,8,0,0" />
</Grid>
</Border>
<GridSplitter Grid.Column="3" Width="4" HorizontalAlignment="Stretch" Background="#333333" />
<!-- PANNELLO 3: Log Asta -->
<Border Grid.Column="4" Background="#0f0f0f" Padding="12" CornerRadius="6" BorderBrush="#333333" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Log Asta" FontSize="13" FontWeight="Bold" Foreground="#00CC66" Margin="0,0,0,10" />
<RichTextBox x:Name="SelectedAuctionLog" Grid.Row="1" IsReadOnly="True"
VerticalScrollBarVisibility="Auto" Background="#1a1a1a" Foreground="#CCC"
Padding="8" FontSize="10" FontFamily="Consolas" BorderBrush="#333333" BorderThickness="1" />
<Button Grid.Row="2" x:Name="ClearLogButton" Content="Pulisci Log" Click="ClearLogButton_Click"
Style="{StaticResource SmallButtonStyle}" IsEnabled="False"
Background="#666" Padding="10,8" Height="32" FontSize="11" Margin="0,8,0,0" HorizontalAlignment="Stretch" />
</Grid>
</Border>
</Grid>
</Border>
</Grid>
</Window>