Sviluppo TradingBot
This commit is contained in:
@@ -0,0 +1,438 @@
|
||||
<UserControl x:Class="DesktopBot.Views.DashboardView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
mc:Ignorable="d">
|
||||
<Grid Background="{StaticResource BackgroundDarkBrush}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- HEADER -->
|
||||
<Grid Grid.Row="0" Margin="24,20,24,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<TextBlock Text="Dashboard" Style="{StaticResource SectionTitle}" Margin="0"/>
|
||||
<Border Background="#1A1A2E" BorderBrush="{StaticResource AccentGreenBrush}" BorderThickness="1" CornerRadius="4" Padding="8,3" Margin="12,0,6,0" VerticalAlignment="Center">
|
||||
<TextBlock Text="PAPER" Foreground="{StaticResource AccentGreenBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="Bold"/>
|
||||
</Border>
|
||||
<Border Background="#1A1A2E" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="4" Padding="8,3" VerticalAlignment="Center">
|
||||
<TextBlock Text="{Binding AccountStatus}" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold"/>
|
||||
</Border>
|
||||
<TextBlock Text="{Binding AccountNumber, StringFormat=' #{0}'}" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI Mono" FontSize="11" VerticalAlignment="Center" Margin="10,0,0,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<TextBlock Text="Caricamento..." Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="12" VerticalAlignment="Center" Margin="0,0,12,0" Visibility="{Binding IsLoading, Converter={StaticResource BoolToVisConverter}}"/>
|
||||
<Button Content="↻ Aggiorna" Command="{Binding RefreshCommand}" Style="{StaticResource OutlineButton}" Padding="14,7"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<!-- KPI CARDS -->
|
||||
<UniformGrid Grid.Row="1" Columns="5" Margin="24,16,24,0">
|
||||
<Border Style="{StaticResource Card}" Margin="0,0,8,0">
|
||||
<StackPanel>
|
||||
<TextBlock Text="EQUITY" Style="{StaticResource LabelSecondary}" Margin="0,0,0,6"/>
|
||||
<TextBlock Text="{Binding Equity, StringFormat='${0:N2}'}" Foreground="{StaticResource AccentGreenBrush}" FontFamily="Segoe UI" FontSize="20" FontWeight="Bold"/>
|
||||
<TextBlock Text="Valore portafoglio" Style="{StaticResource LabelSecondary}" Margin="0,4,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource Card}" Margin="4,0">
|
||||
<StackPanel>
|
||||
<TextBlock Text="BUYING POWER" Style="{StaticResource LabelSecondary}" Margin="0,0,0,6"/>
|
||||
<TextBlock Text="{Binding BuyingPower, StringFormat='${0:N2}'}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="20" FontWeight="Bold"/>
|
||||
<TextBlock Text="Disponibile" Style="{StaticResource LabelSecondary}" Margin="0,4,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource Card}" Margin="4,0">
|
||||
<StackPanel>
|
||||
<TextBlock Text="P&L GIORNALIERO" Style="{StaticResource LabelSecondary}" Margin="0,0,0,6"/>
|
||||
<TextBlock Text="{Binding DailyPnL, StringFormat='{}{0:+$#,##0.00;-$#,##0.00;$0.00}'}" FontFamily="Segoe UI" FontSize="20" FontWeight="Bold">
|
||||
<TextBlock.Style>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentRedBrush}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsPnLPositive}" Value="True">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentGreenBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBlock.Style>
|
||||
</TextBlock>
|
||||
<TextBlock Text="{Binding DailyPnLPercent, StringFormat='{}{0:+0.00;-0.00;0.00}%'}" Style="{StaticResource LabelSecondary}" Margin="0,4,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource Card}" Margin="4,0">
|
||||
<StackPanel>
|
||||
<TextBlock Text="POSIZIONI" Style="{StaticResource LabelSecondary}" Margin="0,0,0,6"/>
|
||||
<TextBlock Text="{Binding OpenPositionsCount}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="20" FontWeight="Bold"/>
|
||||
<TextBlock Text="Trade aperti" Style="{StaticResource LabelSecondary}" Margin="0,4,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource Card}" Margin="8,0,0,0">
|
||||
<StackPanel>
|
||||
<TextBlock Text="ORDINI APERTI" Style="{StaticResource LabelSecondary}" Margin="0,0,0,6"/>
|
||||
<TextBlock Text="{Binding OpenOrdersCount}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="20" FontWeight="Bold"/>
|
||||
<TextBlock Text="In attesa esecuzione" Style="{StaticResource LabelSecondary}" Margin="0,4,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</UniformGrid>
|
||||
|
||||
<!-- STATO BOT -->
|
||||
<Border Grid.Row="2" Margin="24,14,24,0" Background="{StaticResource BackgroundPanelBrush}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="8" Padding="16,12">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0">
|
||||
<TextBlock Text="STATO BOT" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<Ellipse Width="8" Height="8" Margin="0,0,7,0" VerticalAlignment="Center">
|
||||
<Ellipse.Style>
|
||||
<Style TargetType="Ellipse">
|
||||
<Setter Property="Fill" Value="#888"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsBotRunning}" Value="True">
|
||||
<Setter Property="Fill" Value="{StaticResource AccentGreenBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Ellipse.Style>
|
||||
</Ellipse>
|
||||
<TextBlock Text="{Binding BotStatus}" FontFamily="Segoe UI" FontSize="13" FontWeight="SemiBold">
|
||||
<TextBlock.Style>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="Foreground" Value="{StaticResource TextSecondaryBrush}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsBotRunning}" Value="True">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentGreenBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBlock.Style>
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="1">
|
||||
<TextBlock Text="CONTO" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<TextBlock Text="{Binding AccountNumber, TargetNullValue='-'}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI Mono" FontSize="13"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<TextBlock Text="STATO CONTO" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<TextBlock Text="{Binding AccountStatus, TargetNullValue='-'}" Foreground="{StaticResource AccentGreenBrush}" FontFamily="Segoe UI" FontSize="13" FontWeight="SemiBold"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="3">
|
||||
<TextBlock Text="VALUTA" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<TextBlock Text="{Binding Currency, TargetNullValue='-'}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="13"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- API COUNTER — Piano Basic gratuito: Market Data 200 req/min, Trading ~100 req/min -->
|
||||
<Border Grid.Row="3" Margin="24,10,24,0" Background="{StaticResource BackgroundPanelBrush}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="8" Padding="16,10" DataContext="{Binding ApiCounter}">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0" Margin="0,0,8,0">
|
||||
<TextBlock Text="MARKET DATA req/min" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding MarketDataRpm}" FontFamily="Segoe UI Mono" FontSize="16" FontWeight="Bold" VerticalAlignment="Center">
|
||||
<TextBlock.Style>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentGreenBrush}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsMarketDataNearLimit}" Value="True">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentRedBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBlock.Style>
|
||||
</TextBlock>
|
||||
<TextBlock Text=" / 200" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI Mono" FontSize="12" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
<ProgressBar Value="{Binding MarketDataUsagePercent, Mode=OneWay}" Maximum="100" Height="4" Margin="0,5,8,0">
|
||||
<ProgressBar.Style>
|
||||
<Style TargetType="ProgressBar">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentGreenBrush}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsMarketDataNearLimit}" Value="True">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentRedBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</ProgressBar.Style>
|
||||
</ProgressBar>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="1" Margin="0,0,8,0">
|
||||
<TextBlock Text="TRADING req/min" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding TradingRpm}" FontFamily="Segoe UI Mono" FontSize="16" FontWeight="Bold" VerticalAlignment="Center">
|
||||
<TextBlock.Style>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentGreenBrush}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsTradingNearLimit}" Value="True">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentRedBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBlock.Style>
|
||||
</TextBlock>
|
||||
<TextBlock Text=" / 100" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI Mono" FontSize="12" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
<ProgressBar Value="{Binding TradingUsagePercent, Mode=OneWay}" Maximum="100" Height="4" Margin="0,5,8,0">
|
||||
<ProgressBar.Style>
|
||||
<Style TargetType="ProgressBar">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentGreenBrush}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsTradingNearLimit}" Value="True">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentRedBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</ProgressBar.Style>
|
||||
</ProgressBar>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<TextBlock Text="TOT MARKET DATA" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<TextBlock Text="{Binding TotalMarketDataCalls}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI Mono" FontSize="16" FontWeight="Bold"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="3">
|
||||
<TextBlock Text="TOT TRADING" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<TextBlock Text="{Binding TotalTradingCalls}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI Mono" FontSize="16" FontWeight="Bold"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="4">
|
||||
<TextBlock Text="RALLENTATE" Style="{StaticResource LabelSecondary}" Margin="0,0,0,4"/>
|
||||
<TextBlock Text="{Binding ThrottledCalls}" Foreground="{StaticResource AccentRedBrush}" FontFamily="Segoe UI Mono" FontSize="16" FontWeight="Bold"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- ERRORE -->
|
||||
<Border Grid.Row="4" Margin="24,10,24,0" Background="#2A1515" BorderBrush="{StaticResource AccentRedBrush}" BorderThickness="1" CornerRadius="6" Padding="14,8" Visibility="{Binding HasError, Converter={StaticResource BoolToVisConverter}}">
|
||||
<TextBlock Text="{Binding ErrorMessage}" Foreground="{StaticResource AccentRedBrush}" FontFamily="Segoe UI" FontSize="12"/>
|
||||
</Border>
|
||||
|
||||
<!-- POSIZIONI + ORDINI -->
|
||||
<Grid Grid.Row="5" Margin="24,14,24,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="16"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Border Grid.Column="0" Background="{StaticResource BackgroundPanelBrush}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="8" Padding="0">
|
||||
<DockPanel>
|
||||
<Border DockPanel.Dock="Top" BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,0,1" Padding="14,10">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="POSIZIONI APERTE" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="11" FontWeight="SemiBold" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{Binding OpenPositionsCount, StringFormat=' ({0})'}" Foreground="{StaticResource AccentGreenBrush}" FontFamily="Segoe UI" FontSize="11" FontWeight="SemiBold" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Grid DockPanel.Dock="Top" Background="{StaticResource BackgroundDarkBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="60"/>
|
||||
<ColumnDefinition Width="90"/>
|
||||
<ColumnDefinition Width="90"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="SIMBOLO" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="14,7,0,7"/>
|
||||
<TextBlock Grid.Column="1" Text="QTY" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="0,7" HorizontalAlignment="Right"/>
|
||||
<TextBlock Grid.Column="2" Text="ENTRATA" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="0,7" HorizontalAlignment="Right"/>
|
||||
<TextBlock Grid.Column="3" Text="P&L" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="0,7,14,7" HorizontalAlignment="Right"/>
|
||||
</Grid>
|
||||
<ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding Positions}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Border BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,0,1" Padding="14,6">
|
||||
<Border.Style>
|
||||
<Style TargetType="Border">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter Property="Background" Value="{StaticResource NavActiveBrush}"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="60"/>
|
||||
<ColumnDefinition Width="90"/>
|
||||
<ColumnDefinition Width="90"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{Binding Symbol}" Foreground="{StaticResource AccentGreenBrush}" FontFamily="Segoe UI" FontWeight="SemiBold" FontSize="12" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding Quantity}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="12" HorizontalAlignment="Right" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="2" Text="{Binding EntryPrice}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI Mono" FontSize="12" HorizontalAlignment="Right" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="3" Text="{Binding UnrealizedPnL}" FontFamily="Segoe UI Mono" FontSize="12" HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||
<TextBlock.Style>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentRedBrush}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsPnLPositive}" Value="True">
|
||||
<Setter Property="Foreground" Value="{StaticResource AccentGreenBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBlock.Style>
|
||||
</TextBlock>
|
||||
</Grid>
|
||||
</Border>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="2" Background="{StaticResource BackgroundPanelBrush}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="8" Padding="0">
|
||||
<DockPanel>
|
||||
<Border DockPanel.Dock="Top" BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,0,1" Padding="14,10">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="ULTIMI ORDINI" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="11" FontWeight="SemiBold" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{Binding OpenOrdersCount, StringFormat=' ({0} aperti)'}" Foreground="{StaticResource AccentGreenBrush}" FontFamily="Segoe UI" FontSize="11" FontWeight="SemiBold" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Grid DockPanel.Dock="Top" Background="{StaticResource BackgroundDarkBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="60"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="60"/>
|
||||
<ColumnDefinition Width="80"/>
|
||||
<ColumnDefinition Width="100"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="LATO" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="14,7,0,7"/>
|
||||
<TextBlock Grid.Column="1" Text="SIMBOLO" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="8,7"/>
|
||||
<TextBlock Grid.Column="2" Text="QTY" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="0,7" HorizontalAlignment="Right"/>
|
||||
<TextBlock Grid.Column="3" Text="TIPO" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="0,7" HorizontalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="4" Text="STATO" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="10" FontWeight="SemiBold" Padding="0,7" HorizontalAlignment="Center"/>
|
||||
</Grid>
|
||||
<ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding Orders}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Border BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,0,1" Padding="0,4">
|
||||
<Border.Style>
|
||||
<Style TargetType="Border">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter Property="Background" Value="{StaticResource NavActiveBrush}"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="60"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="60"/>
|
||||
<ColumnDefinition Width="80"/>
|
||||
<ColumnDefinition Width="100"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Grid.Column="0" Background="{Binding SideBadgeColor}" CornerRadius="3" Padding="6,2" Margin="14,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center">
|
||||
<TextBlock Text="{Binding Side}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Consolas" FontSize="10" FontWeight="Bold"/>
|
||||
</Border>
|
||||
<TextBlock Grid.Column="1" Text="{Binding Symbol}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="12" Padding="8,0" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="2" Text="{Binding Qty}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="12" HorizontalAlignment="Right" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="3" Text="{Binding OrderType}" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="11" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="4" Text="{Binding Status}" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="11" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- LOG OPERAZIONI BOT -->
|
||||
<Grid Grid.Row="6" Margin="24,14,24,20">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid Grid.Row="0" Margin="0,0,0,8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<Ellipse Width="7" Height="7" Margin="0,0,8,0" VerticalAlignment="Center">
|
||||
<Ellipse.Style>
|
||||
<Style TargetType="Ellipse">
|
||||
<Setter Property="Fill" Value="#888"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsBotRunning}" Value="True">
|
||||
<Setter Property="Fill" Value="{StaticResource AccentGreenBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Ellipse.Style>
|
||||
</Ellipse>
|
||||
<TextBlock Text="Log Operazioni Bot" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="13" FontWeight="SemiBold" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{Binding ActivityLog.Count, StringFormat=' ({0})'}" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="12" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<TextBlock Text="Aggiornamento automatico in tempo reale" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Segoe UI" FontSize="11" VerticalAlignment="Center" Margin="0,0,10,0"/>
|
||||
<Button Content="📋 Copia"
|
||||
Command="{Binding CopyActivityLogCommand}"
|
||||
Style="{StaticResource OutlineButton}"
|
||||
Padding="10,4"
|
||||
ToolTip="Copia tutti i log negli appunti"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<Border Grid.Row="1" Background="{StaticResource BackgroundPanelBrush}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="8" Padding="0">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<ItemsControl ItemsSource="{Binding ActivityLog}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Border BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,0,1" Padding="16,7">
|
||||
<Border.Style>
|
||||
<Style TargetType="Border">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter Property="Background" Value="{StaticResource NavActiveBrush}"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="140"/>
|
||||
<ColumnDefinition Width="72"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{Binding Timestamp, StringFormat='HH:mm:ss dd/MM/yy'}" Foreground="{StaticResource TextSecondaryBrush}" FontFamily="Consolas" FontSize="11" VerticalAlignment="Center"/>
|
||||
<Border Grid.Column="1" Background="{Binding LevelBg}" CornerRadius="3" Padding="6,2" Margin="0,0,12,0" HorizontalAlignment="Left" VerticalAlignment="Center">
|
||||
<TextBlock Text="{Binding Level}" Foreground="{Binding LevelColor}" FontFamily="Consolas" FontSize="10" FontWeight="Bold" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
<TextBlock Grid.Column="2" Text="{Binding Message}" Foreground="{StaticResource TextPrimaryBrush}" FontFamily="Segoe UI" FontSize="12" TextTrimming="CharacterEllipsis" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
Reference in New Issue
Block a user