- tweak: flexbox think

This commit is contained in:
2026-04-10 19:08:53 +03:00
parent f8c190e399
commit 8c746bd6af
4 changed files with 163 additions and 67 deletions

View File

@@ -1,3 +1,5 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFlexPanel_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fd89f5cdd6fcc709bf64bb344b6d9a7e136391412b56d89776722229aa8109c_003FFlexPanel_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFlexPanel_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fd89f5cdd6fcc709bf64bb344b6d9a7e136391412b56d89776722229aa8109c_003FFlexPanel_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AJustifyContent_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FSourcesCache_003F522b8460d4184035d197a487d8418b71d93fc775e2ab45be92655cd4a3563f5_003FJustifyContent_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ALayoutable_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003F1edefc737d6d841fe8ded6818ca6b2f86522867bc89937ba54a07e7b7df7de_003FLayoutable_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>

View File

@@ -11,7 +11,7 @@ public class PauseConverter : IValueConverter
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
{
return value is true ? "Продолжить" : "Пауза";
return value is true ? "" : "||";
}
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)

View File

@@ -21,6 +21,9 @@ public partial class MainViewModel : ViewModelBase
partial void OnArraySizeChanged(int value)
{
if (IsSorting)
StopSort();
GenerateArray();
}

View File

@@ -1,6 +1,5 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:LaborWork"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:LaborWork.ViewModels"
@@ -10,71 +9,163 @@
x:Class="LaborWork.Views.MainView"
x:DataType="viewModels:MainViewModel">
<DockPanel Margin="20">
<panels:FlexPanel DockPanel.Dock="Top"
Direction="Row"
AlignItems="Center" Wrap="Wrap"
Margin="0 0 0 20">
<Button Command="{Binding GenerateArrayCommand}" HorizontalContentAlignment="Center"
Content="Сгенерировать" Width="140"
IsVisible="{Binding !IsSorting}"/>
<Button Command="{Binding StartSortCommand}" HorizontalContentAlignment="Center"
Content="Старт" Width="140"
IsVisible="{Binding !IsSorting}"/>
<Button Command="{Binding StopSortCommand}" HorizontalContentAlignment="Center"
Content="Стоп" Width="140"
IsVisible="{Binding IsSorting}"/>
<Button Command="{Binding TogglePauseCommand}" HorizontalContentAlignment="Center"
Width="140"
IsVisible="{Binding IsSorting}">
<Button.Content>
<TextBlock Text="{Binding IsPaused, Converter={x:Static local:PauseConverter.Instance}}"/>
</Button.Content>
</Button>
<StackPanel Spacing="5" Orientation="Horizontal">
<TextBlock Text="Размер:" VerticalAlignment="Center"/>
<Slider Value="{Binding ArraySize}" Minimum="10" Maximum="100" Width="150"/>
<TextBlock VerticalAlignment="Center" Text="{Binding ArraySize}" Width="30"/>
</StackPanel>
<UserControl.Styles>
<Style Selector="Button">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Offset="0" Color="#40FFFFFF"/>
<GradientStop Offset="1" Color="#20FFFFFF"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="#30FFFFFF"/>
<Setter Property="CornerRadius" Value="16"/>
<Setter Property="Padding" Value="24,14"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Cursor" Value="Hand"/>
</Style>
<Style Selector="Button:pointerover /template/ ContentPresenter">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Offset="0" Color="#50FFFFFF"/>
<GradientStop Offset="1" Color="#30FFFFFF"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
<Style Selector="Button:pressed /template/ ContentPresenter">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Offset="0" Color="#25FFFFFF"/>
<GradientStop Offset="1" Color="#15FFFFFF"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</UserControl.Styles>
<StackPanel Spacing="5" Orientation="Horizontal">
<TextBlock Text="Скорость:" VerticalAlignment="Center"/>
<Slider Value="{Binding Speed}" Minimum="10" Maximum="500" Width="150"
TickFrequency="10" IsSnapToTickEnabled="True"/>
</StackPanel>
</panels:FlexPanel>
<Border Padding="24">
<Border.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,100%">
<GradientStop Offset="0" Color="#0D1B2A"/>
<GradientStop Offset="0.5" Color="#1B263B"/>
<GradientStop Offset="1" Color="#415A77"/>
</LinearGradientBrush>
</Border.Background>
<Border BorderBrush="Gray" BorderThickness="1" CornerRadius="5" Background="#1E1E1E">
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Spacing="2"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Panel>
<Border Width="20"
Background="{Binding Color}"
CornerRadius="2 2 0 0" VerticalAlignment="Bottom"
ToolTip.Tip="{Binding Value}" Height="{Binding Value}">
</Border>
<LayoutTransformControl VerticalAlignment="Bottom">
<LayoutTransformControl.LayoutTransform>
<RotateTransform Angle="90"/>
</LayoutTransformControl.LayoutTransform>
<TextBlock
Text="{Binding Value, StringFormat={}{0:0.00}}"/>
</LayoutTransformControl>
</Panel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Border BoxShadow="0 8 40 0 #60000000" CornerRadius="24" Margin="3">
<Border.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Offset="0" Color="#30FFFFFF"/>
<GradientStop Offset="0.5" Color="#15FFFFFF"/>
<GradientStop Offset="1" Color="#08FFFFFF"/>
</LinearGradientBrush>
</Border.Background>
<Border BorderBrush="#40FFFFFF" BorderThickness="1" CornerRadius="23" Margin="2">
<DockPanel Margin="28">
<panels:FlexPanel DockPanel.Dock="Top"
Direction="Row"
AlignItems="Center" Wrap="Wrap" JustifyContent="SpaceBetween"
Margin="0 0 0 24">
<Border CornerRadius="20" Padding="18,12" Margin="0,16,16,0"
Background="#20FFFFFF" BorderBrush="#30FFFFFF" BorderThickness="1">
<StackPanel Orientation="Horizontal" Spacing="12">
<Button Command="{Binding GenerateArrayCommand}"
IsVisible="{Binding !IsSorting}"
HorizontalContentAlignment="Center" Content="Генерация" Width="176"/>
<Button Command="{Binding StartSortCommand}"
HorizontalContentAlignment="Center"
Content="▶" Width="76"
IsVisible="{Binding !IsSorting}"/>
<Button Command="{Binding StopSortCommand}"
HorizontalContentAlignment="Center"
Content="Стоп" Width="176"
IsVisible="{Binding IsSorting}"/>
<Button Command="{Binding TogglePauseCommand}" Width="80"
HorizontalContentAlignment="Center"
IsVisible="{Binding IsSorting}">
<Button.Content>
<TextBlock Text="{Binding IsPaused, Converter={x:Static local:PauseConverter.Instance}}"/>
</Button.Content>
</Button>
</StackPanel>
</Border>
<Border CornerRadius="20" Padding="18,12" Margin="0,16,16,0"
Background="#15FFFFFF" BorderBrush="#25FFFFFF" BorderThickness="1">
<StackPanel Spacing="10" Orientation="Horizontal">
<TextBlock Text="Кол-во" Foreground="#CCC" VerticalAlignment="Center" FontSize="14"/>
<Slider Value="{Binding ArraySize}" Minimum="10" Maximum="100" Width="110"/>
<Border Background="#25FFFFFF" CornerRadius="10" Padding="14,8"
BorderBrush="#35FFFFFF" BorderThickness="1">
<TextBlock VerticalAlignment="Center" Text="{Binding ArraySize}"
Foreground="White" FontWeight="Bold" FontSize="14"/>
</Border>
</StackPanel>
</Border>
<Border CornerRadius="20" Margin="0, 16, 0, 0" Padding="18,12"
Background="#15FFFFFF" BorderBrush="#25FFFFFF" BorderThickness="1">
<StackPanel Spacing="10" Orientation="Horizontal">
<TextBlock Text="Скорость" Foreground="#CCC" VerticalAlignment="Center" FontSize="14"/>
<Slider Value="{Binding Speed}" Minimum="10" Maximum="500" Width="110"
TickFrequency="10" IsSnapToTickEnabled="True"/>
<Border Background="#25FFFFFF" CornerRadius="10" Padding="14,8"
BorderBrush="#35FFFFFF" BorderThickness="1">
<TextBlock VerticalAlignment="Center" Text="{Binding Speed}"
Foreground="White" FontWeight="Bold" FontSize="14"/>
</Border>
</StackPanel>
</Border>
</panels:FlexPanel>
<Border HorizontalAlignment="Stretch" CornerRadius="24" Background="#08FFFFFF" BorderBrush="#20FFFFFF" BorderThickness="1">
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<panels:FlexPanel
HorizontalAlignment="Stretch"
VerticalAlignment="Bottom"
JustifyContent="Center" ColumnSpacing="5"
/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border MinWidth="16"
Background="{Binding Color}"
CornerRadius="4 4 0 0" VerticalAlignment="Bottom"
ToolTip.Tip="{Binding Value}" Height="{Binding Value}">
<Border.OpacityMask>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Offset="0" Color="#FFFFFF"/>
<GradientStop Offset="0.3" Color="#DDDDDD"/>
<GradientStop Offset="1" Color="#666666"/>
</LinearGradientBrush>
</Border.OpacityMask>
<LayoutTransformControl VerticalAlignment="Bottom">
<LayoutTransformControl.LayoutTransform>
<RotateTransform Angle="90"/>
</LayoutTransformControl.LayoutTransform>
<TextBlock
Text="{Binding Value, StringFormat={}{0:0.0}}"/>
</LayoutTransformControl>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
</DockPanel>
</Border>
</Border>
</DockPanel>
</UserControl>
</Border>
</UserControl>