diff --git a/installer/ElfisaPharmacy.iss b/installer/ElfisaPharmacy.iss
index 5a6c953..5d95e86 100644
--- a/installer/ElfisaPharmacy.iss
+++ b/installer/ElfisaPharmacy.iss
@@ -3,7 +3,7 @@
#define MyAppName "Электронная Фармация"
#define MyAppBrand "ЭльФиСА"
-#define MyAppVersion "2.0.8"
+#define MyAppVersion "2.0.9"
#define MyAppPublisher "PharmData"
#define MyAppURL "https://cdn.24pharmdata.ru"
#define MyAppSupportURL "https://24pharmdata.ru"
diff --git a/src/Elfisa.Avalonia/App.axaml.cs b/src/Elfisa.Avalonia/App.axaml.cs
index 52ec1c3..9b11541 100644
--- a/src/Elfisa.Avalonia/App.axaml.cs
+++ b/src/Elfisa.Avalonia/App.axaml.cs
@@ -28,6 +28,14 @@ public partial class App : Application
app.Resources["AppFontFamily"] = new FontFamily(family);
}
+ /// Применяет масштаб интерфейса (размер шрифта/текста) к главному окну.
+ public static void ApplyScale(double scale)
+ {
+ if (Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime d
+ && d.MainWindow is MainWindow mw)
+ mw.ApplyScale(scale);
+ }
+
public override void OnFrameworkInitializationCompleted()
{
RequestedThemeVariant = Elfisa.Core.SettingsStore.Current.Theme == "Dark"
diff --git a/src/Elfisa.Avalonia/Elfisa.Avalonia.csproj b/src/Elfisa.Avalonia/Elfisa.Avalonia.csproj
index 30e2be0..baf0393 100644
--- a/src/Elfisa.Avalonia/Elfisa.Avalonia.csproj
+++ b/src/Elfisa.Avalonia/Elfisa.Avalonia.csproj
@@ -5,9 +5,9 @@
enable
app.manifest
true
- 2.0.8
- 2.0.8.0
- 2.0.8.0
+ 2.0.9
+ 2.0.9.0
+ 2.0.9.0
ЭльФиСА — Электронная Фармация
PharmData
diff --git a/src/Elfisa.Avalonia/ViewModels/SettingsViewModel.cs b/src/Elfisa.Avalonia/ViewModels/SettingsViewModel.cs
index 03ccaf9..b49b088 100644
--- a/src/Elfisa.Avalonia/ViewModels/SettingsViewModel.cs
+++ b/src/Elfisa.Avalonia/ViewModels/SettingsViewModel.cs
@@ -19,6 +19,12 @@ public partial class SettingsViewModel : ViewModelBase
public string[] Themes { get; } = { "Светлая", "Тёмная" };
[ObservableProperty] private int _themeIndex;
+ /// Размер шрифта/текста — масштаб интерфейса.
+ public string[] FontSizes { get; } = { "Мелкий (90%)", "Обычный (100%)", "Крупный (115%)", "Очень крупный (130%)", "Огромный (150%)" };
+ private static readonly double[] ScaleValues = { 0.9, 1.0, 1.15, 1.3, 1.5 };
+ [ObservableProperty] private int _fontSizeIndex = 1;
+ public double SelectedScale => ScaleValues[Math.Clamp(FontSizeIndex, 0, ScaleValues.Length - 1)];
+
/// Все системные шрифты + «По умолчанию» первым.
public ObservableCollection Fonts { get; } = new();
[ObservableProperty] private string _selectedFont = DefaultFontLabel;
@@ -32,6 +38,12 @@ public partial class SettingsViewModel : ViewModelBase
ApiBaseUrl = SettingsStore.Current.ApiBaseUrl ?? AppConfig.DefaultApiBaseUrl;
ThemeIndex = SettingsStore.Current.Theme == "Dark" ? 1 : 0;
+ var scale = SettingsStore.Current.UiScale;
+ var best = 1;
+ for (int i = 0; i < ScaleValues.Length; i++)
+ if (Math.Abs(ScaleValues[i] - scale) < Math.Abs(ScaleValues[best] - scale)) best = i;
+ FontSizeIndex = best;
+
Fonts.Add(DefaultFontLabel);
foreach (var f in FontManager.Current.SystemFonts
.Select(x => x.Name)
diff --git a/src/Elfisa.Avalonia/Views/MainWindow.axaml b/src/Elfisa.Avalonia/Views/MainWindow.axaml
index 8f476b8..07ab705 100644
--- a/src/Elfisa.Avalonia/Views/MainWindow.axaml
+++ b/src/Elfisa.Avalonia/Views/MainWindow.axaml
@@ -11,6 +11,9 @@
Background="{DynamicResource Bg}"
Title="ЭльФиСА">
-
+
+
+
+
diff --git a/src/Elfisa.Avalonia/Views/MainWindow.axaml.cs b/src/Elfisa.Avalonia/Views/MainWindow.axaml.cs
index 8635b98..e83ff53 100644
--- a/src/Elfisa.Avalonia/Views/MainWindow.axaml.cs
+++ b/src/Elfisa.Avalonia/Views/MainWindow.axaml.cs
@@ -1,4 +1,6 @@
using Avalonia.Controls;
+using Avalonia.Media;
+using Elfisa.Core;
namespace Elfisa.Avalonia.Views;
@@ -7,5 +9,14 @@ public partial class MainWindow : Window
public MainWindow()
{
InitializeComponent();
+ ApplyScale(SettingsStore.Current.UiScale);
+ }
+
+ /// Масштабирует всё содержимое окна (размер шрифта/текста и элементов).
+ public void ApplyScale(double scale)
+ {
+ var host = this.FindControl("ScaleHost");
+ if (host is null) return;
+ host.LayoutTransform = scale == 1.0 ? null : new ScaleTransform(scale, scale);
}
}
\ No newline at end of file
diff --git a/src/Elfisa.Avalonia/Views/SettingsWindow.axaml b/src/Elfisa.Avalonia/Views/SettingsWindow.axaml
index 243588a..0f5a906 100644
--- a/src/Elfisa.Avalonia/Views/SettingsWindow.axaml
+++ b/src/Elfisa.Avalonia/Views/SettingsWindow.axaml
@@ -3,7 +3,7 @@
xmlns:vm="using:Elfisa.Avalonia.ViewModels"
x:Class="Elfisa.Avalonia.Views.SettingsWindow"
x:DataType="vm:SettingsViewModel"
- Width="460" Height="520" CanResize="False"
+ Width="460" Height="590" CanResize="False"
WindowStartupLocation="CenterOwner"
Background="{DynamicResource Bg}"
Title="Настройки">
@@ -33,6 +33,11 @@
+
+
+
+
+
diff --git a/src/Elfisa.Avalonia/Views/SettingsWindow.axaml.cs b/src/Elfisa.Avalonia/Views/SettingsWindow.axaml.cs
index 05f1cf9..12ab652 100644
--- a/src/Elfisa.Avalonia/Views/SettingsWindow.axaml.cs
+++ b/src/Elfisa.Avalonia/Views/SettingsWindow.axaml.cs
@@ -44,12 +44,14 @@ public partial class SettingsWindow : Window
SettingsStore.Current.Theme = vm.ThemeIndex == 1 ? "Dark" : "Light";
var font = vm.SelectedFont == SettingsViewModel.DefaultFontLabel ? null : vm.SelectedFont;
SettingsStore.Current.FontFamily = font;
+ SettingsStore.Current.UiScale = vm.SelectedScale;
SettingsStore.Current.DefaultLocationId = vm.SelectedLocation?.BuyerLocationId;
SettingsStore.Save();
if (Application.Current is { } app)
app.RequestedThemeVariant = vm.ThemeIndex == 1 ? ThemeVariant.Dark : ThemeVariant.Light;
- App.ApplyFont(font); // применяем сразу ко всем окнам
+ App.ApplyFont(font); // шрифт — сразу ко всем окнам
+ App.ApplyScale(vm.SelectedScale); // масштаб — к главному окну
}
Close();
}
diff --git a/src/Elfisa.Core/SettingsStore.cs b/src/Elfisa.Core/SettingsStore.cs
index f504da1..18e6577 100644
--- a/src/Elfisa.Core/SettingsStore.cs
+++ b/src/Elfisa.Core/SettingsStore.cs
@@ -7,6 +7,7 @@ public sealed class AppSettings
public string? ApiBaseUrl { get; set; }
public string Theme { get; set; } = "Light"; // Light | Dark
public string? FontFamily { get; set; } // шрифт интерфейса (null = по умолчанию)
+ public double UiScale { get; set; } = 1.0; // масштаб интерфейса (размер шрифта/текста)
public string? DefaultLocationId { get; set; }
public string? Token { get; set; } // сохранённая сессия
public string? Role { get; set; }