浏览代码

Initial commit: Freight Transport System with Inno Setup installer

Kak 1 周之前
当前提交
d0fc5a9f79
共有 100 个文件被更改,包括 2354 次插入0 次删除
  1. 二进制
      .vs/ProjectEvaluation/wpfapp1.metadata.v9.bin
  2. 二进制
      .vs/ProjectEvaluation/wpfapp1.projects.v9.bin
  3. 二进制
      .vs/ProjectEvaluation/wpfapp1.strings.v9.bin
  4. 3 0
      .vs/ProjectSettings.json
  5. 9 0
      .vs/VSWorkspaceState.json
  6. 二进制
      .vs/WpfApp1/CopilotIndices/17.14.1231.31060/CodeChunks.db
  7. 二进制
      .vs/WpfApp1/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm
  8. 二进制
      .vs/WpfApp1/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal
  9. 二进制
      .vs/WpfApp1/CopilotIndices/17.14.1231.31060/SemanticSymbols.db
  10. 二进制
      .vs/WpfApp1/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm
  11. 二进制
      .vs/WpfApp1/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal
  12. 二进制
      .vs/WpfApp1/DesignTimeBuild/.dtbcache.v2
  13. 二进制
      .vs/WpfApp1/FileContentIndex/3fac92a0-b659-47be-a0ba-6df4032b32ae.vsidx
  14. 二进制
      .vs/WpfApp1/FileContentIndex/70be6eae-75e6-4dd6-af11-a2771f26af72.vsidx
  15. 二进制
      .vs/WpfApp1/FileContentIndex/8474bdd3-b2f2-4efa-aa6a-a21349669f48.vsidx
  16. 二进制
      .vs/WpfApp1/FileContentIndex/e91f0a7b-de69-4f9c-a76b-32ecbea8a535.vsidx
  17. 二进制
      .vs/WpfApp1/FileContentIndex/f6ad1d81-2b6e-40f3-a0af-35d4b505b897.vsidx
  18. 二进制
      .vs/WpfApp1/v17/.futdcache.v2
  19. 二进制
      .vs/WpfApp1/v17/.suo
  20. 二进制
      .vs/WpfApp1/v17/.wsuo
  21. 309 0
      .vs/WpfApp1/v17/DocumentLayout.backup.json
  22. 309 0
      .vs/WpfApp1/v17/DocumentLayout.json
  23. 二进制
      .vs/WpfApp1/v17/workspaceFileList.bin
  24. 二进制
      .vs/slnx.sqlite
  25. 9 0
      App.xaml
  26. 14 0
      App.xaml.cs
  27. 15 0
      AppSession.cs
  28. 10 0
      AssemblyInfo.cs
  29. 33 0
      DriversWindow.xaml
  30. 233 0
      DriversWindow.xaml.cs
  31. 34 0
      EditDriverWindow.xaml
  32. 50 0
      EditDriverWindow.xaml.cs
  33. 40 0
      LoginWindow.xaml
  34. 70 0
      LoginWindow.xaml.cs
  35. 44 0
      MainWindow.xaml
  36. 32 0
      MainWindow.xaml.cs
  37. 33 0
      OrdersWindow.xaml
  38. 78 0
      OrdersWindow.xaml.cs
  39. 34 0
      PasswordHelper.cs
  40. 8 0
      System/Windows/Forms/FolderBrowserDialog.cs
  41. 23 0
      WpfApp1.csproj
  42. 18 0
      WpfApp1.csproj.user
  43. 25 0
      WpfApp1.sln
  44. 二进制
      bin/Debug/net9.0-windows/BCrypt-Net-Next.dll
  45. 二进制
      bin/Debug/net9.0-windows/CSharpMarkup.WinUI.LiveChartsCore.SkiaSharpView.dll
  46. 二进制
      bin/Debug/net9.0-windows/CSharpMarkup.WinUI.dll
  47. 二进制
      bin/Debug/net9.0-windows/CsvHelper.dll
  48. 二进制
      bin/Debug/net9.0-windows/EPPlus.Interfaces.dll
  49. 二进制
      bin/Debug/net9.0-windows/EPPlus.dll
  50. 二进制
      bin/Debug/net9.0-windows/GLWpfControl.dll
  51. 二进制
      bin/Debug/net9.0-windows/HarfBuzzSharp.dll
  52. 二进制
      bin/Debug/net9.0-windows/LiveChartsCore.Behaviours.dll
  53. 二进制
      bin/Debug/net9.0-windows/LiveChartsCore.SkiaSharpView.Uno.WinUI.dll
  54. 二进制
      bin/Debug/net9.0-windows/LiveChartsCore.SkiaSharpView.WPF.dll
  55. 二进制
      bin/Debug/net9.0-windows/LiveChartsCore.SkiaSharpView.dll
  56. 二进制
      bin/Debug/net9.0-windows/LiveChartsCore.dll
  57. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.Configuration.Abstractions.dll
  58. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.Configuration.FileExtensions.dll
  59. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.Configuration.Json.dll
  60. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.Configuration.dll
  61. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  62. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.FileProviders.Abstractions.dll
  63. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.FileProviders.Physical.dll
  64. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.FileSystemGlobbing.dll
  65. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.Logging.Abstractions.dll
  66. 二进制
      bin/Debug/net9.0-windows/Microsoft.Extensions.Primitives.dll
  67. 二进制
      bin/Debug/net9.0-windows/Microsoft.IO.RecyclableMemoryStream.dll
  68. 二进制
      bin/Debug/net9.0-windows/Npgsql.dll
  69. 二进制
      bin/Debug/net9.0-windows/NuGet.Frameworks.dll
  70. 二进制
      bin/Debug/net9.0-windows/OpenTK.dll
  71. 二进制
      bin/Debug/net9.0-windows/OxyPlot.Wpf.Shared.dll
  72. 二进制
      bin/Debug/net9.0-windows/OxyPlot.Wpf.dll
  73. 二进制
      bin/Debug/net9.0-windows/OxyPlot.dll
  74. 二进制
      bin/Debug/net9.0-windows/SkiaSharp.HarfBuzz.dll
  75. 二进制
      bin/Debug/net9.0-windows/SkiaSharp.Views.Desktop.Common.dll
  76. 二进制
      bin/Debug/net9.0-windows/SkiaSharp.Views.WPF.dll
  77. 二进制
      bin/Debug/net9.0-windows/SkiaSharp.Views.Windows.dll
  78. 二进制
      bin/Debug/net9.0-windows/SkiaSharp.dll
  79. 二进制
      bin/Debug/net9.0-windows/System.Security.Cryptography.Pkcs.dll
  80. 二进制
      bin/Debug/net9.0-windows/System.Security.Cryptography.Xml.dll
  81. 二进制
      bin/Debug/net9.0-windows/Uno.Diagnostics.Eventing.dll
  82. 二进制
      bin/Debug/net9.0-windows/Uno.Fonts.Fluent.dll
  83. 二进制
      bin/Debug/net9.0-windows/Uno.Foundation.Logging.dll
  84. 二进制
      bin/Debug/net9.0-windows/Uno.Foundation.dll
  85. 二进制
      bin/Debug/net9.0-windows/Uno.UI.Composition.dll
  86. 二进制
      bin/Debug/net9.0-windows/Uno.UI.Dispatching.dll
  87. 二进制
      bin/Debug/net9.0-windows/Uno.UI.FluentTheme.dll
  88. 二进制
      bin/Debug/net9.0-windows/Uno.UI.FluentTheme.v1.dll
  89. 二进制
      bin/Debug/net9.0-windows/Uno.UI.FluentTheme.v2.dll
  90. 二进制
      bin/Debug/net9.0-windows/Uno.UI.Toolkit.dll
  91. 二进制
      bin/Debug/net9.0-windows/Uno.UI.dll
  92. 二进制
      bin/Debug/net9.0-windows/Uno.Xaml.dll
  93. 二进制
      bin/Debug/net9.0-windows/Uno.dll
  94. 901 0
      bin/Debug/net9.0-windows/WpfApp1.deps.json
  95. 二进制
      bin/Debug/net9.0-windows/WpfApp1.dll
  96. 二进制
      bin/Debug/net9.0-windows/WpfApp1.exe
  97. 二进制
      bin/Debug/net9.0-windows/WpfApp1.pdb
  98. 20 0
      bin/Debug/net9.0-windows/WpfApp1.runtimeconfig.json
  99. 二进制
      bin/Debug/net9.0-windows/runtimes/osx/native/libHarfBuzzSharp.dylib
  100. 二进制
      bin/Debug/net9.0-windows/runtimes/osx/native/libSkiaSharp.dylib

二进制
.vs/ProjectEvaluation/wpfapp1.metadata.v9.bin


二进制
.vs/ProjectEvaluation/wpfapp1.projects.v9.bin


二进制
.vs/ProjectEvaluation/wpfapp1.strings.v9.bin


+ 3 - 0
.vs/ProjectSettings.json

@@ -0,0 +1,3 @@
+{
+  "CurrentProjectSetting": null
+}

+ 9 - 0
.vs/VSWorkspaceState.json

@@ -0,0 +1,9 @@
+{
+  "ExpandedNodes": [
+    "",
+    "\\bin",
+    "\\obj"
+  ],
+  "SelectedNode": "\\Window5.xaml",
+  "PreviewInSolutionExplorer": false
+}

二进制
.vs/WpfApp1/CopilotIndices/17.14.1231.31060/CodeChunks.db


二进制
.vs/WpfApp1/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm


二进制
.vs/WpfApp1/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal


二进制
.vs/WpfApp1/CopilotIndices/17.14.1231.31060/SemanticSymbols.db


二进制
.vs/WpfApp1/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm


二进制
.vs/WpfApp1/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal


二进制
.vs/WpfApp1/DesignTimeBuild/.dtbcache.v2


二进制
.vs/WpfApp1/FileContentIndex/3fac92a0-b659-47be-a0ba-6df4032b32ae.vsidx


二进制
.vs/WpfApp1/FileContentIndex/70be6eae-75e6-4dd6-af11-a2771f26af72.vsidx


二进制
.vs/WpfApp1/FileContentIndex/8474bdd3-b2f2-4efa-aa6a-a21349669f48.vsidx


二进制
.vs/WpfApp1/FileContentIndex/e91f0a7b-de69-4f9c-a76b-32ecbea8a535.vsidx


二进制
.vs/WpfApp1/FileContentIndex/f6ad1d81-2b6e-40f3-a0af-35d4b505b897.vsidx


二进制
.vs/WpfApp1/v17/.futdcache.v2


二进制
.vs/WpfApp1/v17/.suo


二进制
.vs/WpfApp1/v17/.wsuo


+ 309 - 0
.vs/WpfApp1/v17/DocumentLayout.backup.json

@@ -0,0 +1,309 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\loginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:loginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\app.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:app.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\driverswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:driverswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\editdriverwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:editdriverwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\driverswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:driverswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\editdriverwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:editdriverwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\orderswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:orderswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\orderswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:orderswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\appsession.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:appsession.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\assemblyinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:assemblyinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\passwordhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:passwordhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 5,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{b1e99781-ab81-11d0-b683-00aa00a3ee26}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "MainWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\MainWindow.xaml.cs",
+              "RelativeDocumentMoniker": "MainWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\MainWindow.xaml.cs",
+              "RelativeToolTip": "MainWindow.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAABAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-12-18T13:31:57.249Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "Title": "EditDriverWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\EditDriverWindow.xaml",
+              "RelativeDocumentMoniker": "EditDriverWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\EditDriverWindow.xaml",
+              "RelativeToolTip": "EditDriverWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-05-28T16:01:52.836Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "App.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\App.xaml",
+              "RelativeDocumentMoniker": "App.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\App.xaml",
+              "RelativeToolTip": "App.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-12-19T06:15:43.931Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "LoginWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\LoginWindow.xaml",
+              "RelativeDocumentMoniker": "LoginWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\LoginWindow.xaml",
+              "RelativeToolTip": "LoginWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-05-28T16:39:02.073Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
+              "Title": "DriversWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\DriversWindow.xaml",
+              "RelativeDocumentMoniker": "DriversWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\DriversWindow.xaml",
+              "RelativeToolTip": "DriversWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-05-28T16:07:12.928Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "LoginWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\LoginWindow.xaml.cs",
+              "RelativeDocumentMoniker": "LoginWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\LoginWindow.xaml.cs",
+              "RelativeToolTip": "LoginWindow.xaml.cs",
+              "ViewState": "AgIAADkAAAAAAAAAAAAYwFwAAAABAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:39:30.267Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "DriversWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\DriversWindow.xaml.cs",
+              "RelativeDocumentMoniker": "DriversWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\DriversWindow.xaml.cs",
+              "RelativeToolTip": "DriversWindow.xaml.cs",
+              "ViewState": "AgIAALYAAAAAAAAAAAAAAMoAAAATAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:08:54.691Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "Title": "EditDriverWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\EditDriverWindow.xaml.cs",
+              "RelativeDocumentMoniker": "EditDriverWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\EditDriverWindow.xaml.cs",
+              "RelativeToolTip": "EditDriverWindow.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:09:42.836Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "OrdersWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\OrdersWindow.xaml.cs",
+              "RelativeDocumentMoniker": "OrdersWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\OrdersWindow.xaml.cs",
+              "RelativeToolTip": "OrdersWindow.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAiAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:08:15.748Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "Title": "OrdersWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\OrdersWindow.xaml",
+              "RelativeDocumentMoniker": "OrdersWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\OrdersWindow.xaml",
+              "RelativeToolTip": "OrdersWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-05-28T16:06:19.974Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 10,
+              "Title": "MainWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\MainWindow.xaml",
+              "RelativeDocumentMoniker": "MainWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\MainWindow.xaml",
+              "RelativeToolTip": "MainWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-12-18T13:31:58.893Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 11,
+              "Title": "AppSession.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\AppSession.cs",
+              "RelativeDocumentMoniker": "AppSession.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\AppSession.cs",
+              "RelativeToolTip": "AppSession.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:36:02.411Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 12,
+              "Title": "AssemblyInfo.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\AssemblyInfo.cs",
+              "RelativeDocumentMoniker": "AssemblyInfo.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\AssemblyInfo.cs",
+              "RelativeToolTip": "AssemblyInfo.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-20T09:31:58.005Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 13,
+              "Title": "PasswordHelper.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\PasswordHelper.cs",
+              "RelativeDocumentMoniker": "PasswordHelper.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\PasswordHelper.cs",
+              "RelativeToolTip": "PasswordHelper.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-12T15:04:13.576Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
+              "Title": "ResourcePart.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs",
+              "RelativeDocumentMoniker": "..\\..\\..\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs [\u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435]",
+              "RelativeToolTip": "..\\..\\..\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs [\u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435]",
+              "ViewState": "AgIAABQAAAAAAAAAAAAhwCQAAAAuAAAAAQAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-12T18:05:23.908Z",
+              "EditorCaption": " [\u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435]"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "App.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\App.xaml.cs",
+              "RelativeDocumentMoniker": "App.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\App.xaml.cs",
+              "RelativeToolTip": "App.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-12T17:36:49.564Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
+              "Title": "Uno.UI.SourceGenerators.props",
+              "DocumentMoniker": "C:\\Users\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props",
+              "RelativeDocumentMoniker": "..\\..\\..\\..\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props",
+              "ToolTip": "C:\\Users\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props",
+              "RelativeToolTip": "..\\..\\..\\..\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003801|",
+              "WhenOpened": "2025-12-22T05:50:10.479Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
+              "Title": "Microsoft.PackageDependencyResolution.targets",
+              "DocumentMoniker": "C:\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets",
+              "RelativeDocumentMoniker": "..\\..\\..\\..\\..\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets",
+              "ToolTip": "C:\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets",
+              "RelativeToolTip": "..\\..\\..\\..\\..\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003801|",
+              "WhenOpened": "2025-12-22T05:49:05.717Z"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

+ 309 - 0
.vs/WpfApp1/v17/DocumentLayout.json

@@ -0,0 +1,309 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\loginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:loginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\app.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:app.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\driverswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:driverswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\editdriverwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:editdriverwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\driverswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:driverswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\editdriverwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:editdriverwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\orderswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:orderswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\orderswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:orderswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\appsession.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:appsession.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\assemblyinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:assemblyinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\passwordhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:passwordhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|c:\\users\\\u0442\u0430\u0442\u044C\u044F\u043D\u0430\\desktop\\\u0432\u0431\u0433\\wpfapp1\\app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F128A12D-8457-46FF-8418-6712B1BE36F9}|WpfApp1.csproj|solutionrelative:app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 5,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{b1e99781-ab81-11d0-b683-00aa00a3ee26}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "MainWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\MainWindow.xaml.cs",
+              "RelativeDocumentMoniker": "MainWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\MainWindow.xaml.cs",
+              "RelativeToolTip": "MainWindow.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAABAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-12-18T13:31:57.249Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "Title": "EditDriverWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\EditDriverWindow.xaml",
+              "RelativeDocumentMoniker": "EditDriverWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\EditDriverWindow.xaml",
+              "RelativeToolTip": "EditDriverWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-05-28T16:01:52.836Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "App.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\App.xaml",
+              "RelativeDocumentMoniker": "App.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\App.xaml",
+              "RelativeToolTip": "App.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-12-19T06:15:43.931Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "LoginWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\LoginWindow.xaml",
+              "RelativeDocumentMoniker": "LoginWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\LoginWindow.xaml",
+              "RelativeToolTip": "LoginWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-05-28T16:39:02.073Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
+              "Title": "DriversWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\DriversWindow.xaml",
+              "RelativeDocumentMoniker": "DriversWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\DriversWindow.xaml",
+              "RelativeToolTip": "DriversWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-05-28T16:07:12.928Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "LoginWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\LoginWindow.xaml.cs",
+              "RelativeDocumentMoniker": "LoginWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\LoginWindow.xaml.cs",
+              "RelativeToolTip": "LoginWindow.xaml.cs",
+              "ViewState": "AgIAADkAAAAAAAAAAAAYwFwAAAABAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:39:30.267Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "DriversWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\DriversWindow.xaml.cs",
+              "RelativeDocumentMoniker": "DriversWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\DriversWindow.xaml.cs",
+              "RelativeToolTip": "DriversWindow.xaml.cs",
+              "ViewState": "AgIAALYAAAAAAAAAAAAAAMoAAAATAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:08:54.691Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "Title": "EditDriverWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\EditDriverWindow.xaml.cs",
+              "RelativeDocumentMoniker": "EditDriverWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\EditDriverWindow.xaml.cs",
+              "RelativeToolTip": "EditDriverWindow.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:09:42.836Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "OrdersWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\OrdersWindow.xaml.cs",
+              "RelativeDocumentMoniker": "OrdersWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\OrdersWindow.xaml.cs",
+              "RelativeToolTip": "OrdersWindow.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAiAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:08:15.748Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "Title": "OrdersWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\OrdersWindow.xaml",
+              "RelativeDocumentMoniker": "OrdersWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\OrdersWindow.xaml",
+              "RelativeToolTip": "OrdersWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-05-28T16:06:19.974Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 10,
+              "Title": "MainWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\MainWindow.xaml",
+              "RelativeDocumentMoniker": "MainWindow.xaml",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\MainWindow.xaml",
+              "RelativeToolTip": "MainWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-12-18T13:31:58.893Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 11,
+              "Title": "AppSession.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\AppSession.cs",
+              "RelativeDocumentMoniker": "AppSession.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\AppSession.cs",
+              "RelativeToolTip": "AppSession.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-28T16:36:02.411Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 12,
+              "Title": "AssemblyInfo.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\AssemblyInfo.cs",
+              "RelativeDocumentMoniker": "AssemblyInfo.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\AssemblyInfo.cs",
+              "RelativeToolTip": "AssemblyInfo.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-20T09:31:58.005Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 13,
+              "Title": "PasswordHelper.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\PasswordHelper.cs",
+              "RelativeDocumentMoniker": "PasswordHelper.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\PasswordHelper.cs",
+              "RelativeToolTip": "PasswordHelper.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-12T15:04:13.576Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
+              "Title": "ResourcePart.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs",
+              "RelativeDocumentMoniker": "..\\..\\..\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs [\u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435]",
+              "RelativeToolTip": "..\\..\\..\\AppData\\Local\\Temp\\.vsdbgsrc\\b49ace08f4cd26a4f275d628999a0f91ccb8a1892704530d9e6f5bd1284082f1\\ResourcePart.cs [\u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435]",
+              "ViewState": "AgIAABQAAAAAAAAAAAAhwCQAAAAuAAAAAQAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-12T18:05:23.908Z",
+              "EditorCaption": " [\u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435]"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "App.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\App.xaml.cs",
+              "RelativeDocumentMoniker": "App.xaml.cs",
+              "ToolTip": "C:\\Users\\\u0422\u0430\u0442\u044C\u044F\u043D\u0430\\Desktop\\\u0432\u0431\u0433\\WpfApp1\\App.xaml.cs",
+              "RelativeToolTip": "App.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-05-12T17:36:49.564Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
+              "Title": "Uno.UI.SourceGenerators.props",
+              "DocumentMoniker": "C:\\Users\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props",
+              "RelativeDocumentMoniker": "..\\..\\..\\..\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props",
+              "ToolTip": "C:\\Users\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props",
+              "RelativeToolTip": "..\\..\\..\\..\\Student\\.nuget\\packages\\uno.winui\\6.0.465\\buildTransitive\\Uno.UI.SourceGenerators.props",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003801|",
+              "WhenOpened": "2025-12-22T05:50:10.479Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
+              "Title": "Microsoft.PackageDependencyResolution.targets",
+              "DocumentMoniker": "C:\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets",
+              "RelativeDocumentMoniker": "..\\..\\..\\..\\..\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets",
+              "ToolTip": "C:\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets",
+              "RelativeToolTip": "..\\..\\..\\..\\..\\Program Files\\dotnet\\sdk\\9.0.305\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targets",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003801|",
+              "WhenOpened": "2025-12-22T05:49:05.717Z"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

二进制
.vs/WpfApp1/v17/workspaceFileList.bin


二进制
.vs/slnx.sqlite


+ 9 - 0
App.xaml

@@ -0,0 +1,9 @@
+<Application x:Class="WpfApp1.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:WpfApp1"
+             StartupUri="LoginWindow.xaml">
+    <Application.Resources>
+         
+    </Application.Resources>
+</Application>

+ 14 - 0
App.xaml.cs

@@ -0,0 +1,14 @@
+using System.Configuration;
+using System.Data;
+using System.Windows;
+
+namespace WpfApp1
+{
+    /// <summary>
+    /// Interaction logic for App.xaml
+    /// </summary>
+    public partial class App : Application
+    {
+    }
+
+}

+ 15 - 0
AppSession.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WpfApp1
+{
+    internal class AppSession
+    {
+        public static int UserId { get; set; }
+        public static string Username { get; set; }
+        public static string Role { get; set; }
+    }
+}

+ 10 - 0
AssemblyInfo.cs

@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None,            //where theme specific resource dictionaries are located
+                                                //(used if a resource is not found in the page,
+                                                // or application resource dictionaries)
+    ResourceDictionaryLocation.SourceAssembly   //where the generic resource dictionary is located
+                                                //(used if a resource is not found in the page,
+                                                // app, or any theme specific resource dictionaries)
+)]

+ 33 - 0
DriversWindow.xaml

@@ -0,0 +1,33 @@
+<Window x:Class="WpfApp1.DriversWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        Title="Водители" Height="500" Width="800"
+        WindowStartupLocation="CenterScreen">
+    <Grid Margin="15">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+
+        <TextBlock Text="Справочник водителей" FontSize="18" FontWeight="Bold" Margin="0,0,0,10"/>
+
+        <DataGrid x:Name="dgDrivers" Grid.Row="1" 
+                  AutoGenerateColumns="False" IsReadOnly="True"
+                  SelectionMode="Single" Margin="0,0,0,10">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="ID" Binding="{Binding driverid}" Width="60"/>
+                <DataGridTextColumn Header="Фамилия" Binding="{Binding lastname}" Width="150"/>
+                <DataGridTextColumn Header="Имя и Отчество" Binding="{Binding fullname}" Width="220"/>
+                <DataGridTextColumn Header="Табельный номер" Binding="{Binding tabnumber}" Width="130"/>
+            </DataGrid.Columns>
+        </DataGrid>
+
+        <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
+            <Button Content="Добавить" Width="100" Height="32" Margin="5" Click="BtnAdd_Click"/>
+            <Button Content="Изменить" Width="100" Height="32" Margin="5" Click="BtnEdit_Click"/>
+            <Button Content="Удалить" Width="100" Height="32" Margin="5" Click="BtnDelete_Click"/>
+            <Button Content="Обновить" Width="100" Height="32" Margin="5" Click="BtnRefresh_Click"/>
+        </StackPanel>
+    </Grid>
+</Window>

+ 233 - 0
DriversWindow.xaml.cs

@@ -0,0 +1,233 @@
+using Npgsql;
+using System;
+using System.Data;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace WpfApp1
+{
+    public partial class DriversWindow : Window
+    {
+        private const string Conn = "Host=80.250.189.52;Port=5432;Database=dbwork;Username=kotov_aa;Password=0$s%MB3&F6#";
+
+        public DriversWindow()
+        {
+            InitializeComponent();
+            ApplyPermissions();
+            LoadDrivers();
+        }
+
+        private void ApplyPermissions()
+        {
+            string role = AppSession.Role;
+            bool canEdit = role == "admin" || role == "dispatcher";
+            bool canDelete = role == "admin";
+
+            // Безопасный перебор кнопок
+            var grid = Content as Grid;
+            if (grid == null || grid.Children.Count < 3) return;
+
+            var panel = grid.Children[2] as StackPanel;
+            if (panel == null) return;
+
+            foreach (var child in panel.Children)
+            {
+                if (child is Button btn)
+                {
+                    string content = btn.Content?.ToString() ?? "";
+                    if (content.Contains("Добавить") || content.Contains("Изменить"))
+                        btn.IsEnabled = canEdit;
+                    if (content.Contains("Удалить"))
+                        btn.IsEnabled = canDelete;
+                }
+            }
+        }
+
+        private void LoadDrivers()
+        {
+            try
+            {
+                string sql = "SELECT * FROM Drivers ORDER BY driverid";
+                using var conn = new NpgsqlConnection(Conn);
+                conn.Open();
+                var adapter = new NpgsqlDataAdapter(sql, conn);
+                DataTable dt = new DataTable();
+                adapter.Fill(dt);
+                dgDrivers.ItemsSource = dt.DefaultView;
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show("Ошибка загрузки: " + ex.Message);
+            }
+        }
+
+        private void BtnRefresh_Click(object sender, RoutedEventArgs e) => LoadDrivers();
+
+        private void BtnAdd_Click(object sender, RoutedEventArgs e)
+        {
+            if (AppSession.Role == "driver")
+            {
+                MessageBox.Show("Нет прав");
+                return;
+            }
+
+            var dlg = new EditDriverWindow();
+            dlg.Title = "Добавление водителя";
+            if (dlg.ShowDialog() == true)
+            {
+                try
+                {
+                    // ✅ ПАРАМЕТРИЗОВАННЫЙ ЗАПРОС (защита от SQL-инъекций)
+                    string sql = "INSERT INTO Drivers (lastname, fullname, tabnumber) " +
+                                 "VALUES (@lastname, @fullname, @tabnumber)";
+                    using var conn = new NpgsqlConnection(Conn);
+                    conn.Open();
+                    using var cmd = new NpgsqlCommand(sql, conn);
+                    cmd.Parameters.AddWithValue("@lastname", dlg.LastName ?? "");
+                    cmd.Parameters.AddWithValue("@fullname", dlg.FullName ?? "");
+                    cmd.Parameters.AddWithValue("@tabnumber", dlg.TabNumber ?? "");
+
+                    int affected = cmd.ExecuteNonQuery();
+
+                    if (affected > 0)
+                    {
+                        LoadDrivers();
+                        MessageBox.Show("Водитель успешно добавлен", "Успех",
+                            MessageBoxButton.OK, MessageBoxImage.Information);
+                    }
+                }
+                catch (PostgresException pgEx)
+                {
+                    // Специальная обработка ошибок PostgreSQL
+                    string errorMsg = "Ошибка базы данных:\n";
+
+                    if (pgEx.SqlState == "23505")
+                        errorMsg += "Табельный номер уже существует!";
+                    else if (pgEx.SqlState == "23503")
+                        errorMsg += "Нарушение связей в базе данных.";
+                    else if (pgEx.SqlState == "42P01")
+                        errorMsg += "Таблица не найдена. Проверьте структуру БД.";
+                    else
+                        errorMsg += pgEx.MessageText + "\nКод: " + pgEx.SqlState;
+
+                    MessageBox.Show(errorMsg, "Ошибка",
+                        MessageBoxButton.OK, MessageBoxImage.Error);
+                }
+                catch (Exception ex)
+                {
+                    MessageBox.Show("Ошибка: " + ex.Message + "\n\n" + ex.StackTrace,
+                        "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
+                }
+            }
+        }
+
+        private void BtnEdit_Click(object sender, RoutedEventArgs e)
+        {
+            if (AppSession.Role == "driver")
+            {
+                MessageBox.Show("Нет прав");
+                return;
+            }
+            if (dgDrivers.SelectedItem == null)
+            {
+                MessageBox.Show("Выберите запись");
+                return;
+            }
+
+            var row = (DataRowView)dgDrivers.SelectedItem;
+            var dlg = new EditDriverWindow();
+            dlg.Title = "Изменение водителя";
+            dlg.DriverId = Convert.ToInt32(row["driverid"]);
+            dlg.LastName = row["lastname"].ToString();
+            dlg.FullName = row["fullname"].ToString();
+            dlg.TabNumber = row["tabnumber"].ToString();
+
+            if (dlg.ShowDialog() == true)
+            {
+                try
+                {
+                    // ✅ ПАРАМЕТРИЗОВАННЫЙ ЗАПРОС
+                    string sql = "UPDATE Drivers SET lastname=@lastname, " +
+                                 "fullname=@fullname, tabnumber=@tabnumber " +
+                                 "WHERE driverid=@driverid";
+                    using var conn = new NpgsqlConnection(Conn);
+                    conn.Open();
+                    using var cmd = new NpgsqlCommand(sql, conn);
+                    cmd.Parameters.AddWithValue("@lastname", dlg.LastName ?? "");
+                    cmd.Parameters.AddWithValue("@fullname", dlg.FullName ?? "");
+                    cmd.Parameters.AddWithValue("@tabnumber", dlg.TabNumber ?? "");
+                    cmd.Parameters.AddWithValue("@driverid", dlg.DriverId);
+
+                    cmd.ExecuteNonQuery();
+                    LoadDrivers();
+                    MessageBox.Show("Данные обновлены", "Успех",
+                        MessageBoxButton.OK, MessageBoxImage.Information);
+                }
+                catch (PostgresException pgEx)
+                {
+                    string errorMsg = "Ошибка базы данных:\n";
+                    if (pgEx.SqlState == "23505")
+                        errorMsg += "Табельный номер уже существует!";
+                    else
+                        errorMsg += pgEx.MessageText;
+
+                    MessageBox.Show(errorMsg, "Ошибка",
+                        MessageBoxButton.OK, MessageBoxImage.Error);
+                }
+                catch (Exception ex)
+                {
+                    MessageBox.Show("Ошибка: " + ex.Message);
+                }
+            }
+        }
+
+        private void BtnDelete_Click(object sender, RoutedEventArgs e)
+        {
+            if (AppSession.Role != "admin")
+            {
+                MessageBox.Show("Только администратор может удалять");
+                return;
+            }
+            if (dgDrivers.SelectedItem == null)
+            {
+                MessageBox.Show("Выберите запись");
+                return;
+            }
+
+            var row = (DataRowView)dgDrivers.SelectedItem;
+            int id = Convert.ToInt32(row["driverid"]);
+
+            if (MessageBox.Show("Удалить запись?", "Подтверждение",
+                MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
+            {
+                try
+                {
+                    string sql = "DELETE FROM Drivers WHERE driverid = @id";
+                    using var conn = new NpgsqlConnection(Conn);
+                    conn.Open();
+                    using var cmd = new NpgsqlCommand(sql, conn);
+                    cmd.Parameters.AddWithValue("@id", id);
+                    cmd.ExecuteNonQuery();
+                    LoadDrivers();
+                    MessageBox.Show("Запись удалена", "Успех",
+                        MessageBoxButton.OK, MessageBoxImage.Information);
+                }
+                catch (PostgresException pgEx)
+                {
+                    string errorMsg = "Ошибка базы данных:\n";
+                    if (pgEx.SqlState == "23503")
+                        errorMsg += "Нельзя удалить: водитель закреплён за машиной!";
+                    else
+                        errorMsg += pgEx.MessageText;
+
+                    MessageBox.Show(errorMsg, "Ошибка",
+                        MessageBoxButton.OK, MessageBoxImage.Error);
+                }
+                catch (Exception ex)
+                {
+                    MessageBox.Show("Ошибка: " + ex.Message);
+                }
+            }
+        }
+    }
+}

+ 34 - 0
EditDriverWindow.xaml

@@ -0,0 +1,34 @@
+<Window x:Class="WpfApp1.EditDriverWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        Title="Редактирование водителя" Height="350" Width="380"
+        WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
+
+    <Grid Margin="20">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+
+        <TextBlock Text="Фамилия:" Margin="0,0,0,5" FontWeight="Bold"/>
+        <TextBox x:Name="txtLastName" Grid.Row="1" Height="28" Margin="0,0,0,15"/>
+
+        <TextBlock Text="Имя и Отчество:" Grid.Row="2" Margin="0,0,0,5" FontWeight="Bold"/>
+        <TextBox x:Name="txtFullName" Grid.Row="3" Height="28" Margin="0,0,0,15"/>
+
+        <TextBlock Text="Табельный номер:" Grid.Row="4" Margin="0,0,0,5" FontWeight="Bold"/>
+        <TextBox x:Name="txtTabNumber" Grid.Row="5" Height="28" Margin="0,0,0,20"/>
+
+        <StackPanel Grid.Row="6" Orientation="Horizontal" HorizontalAlignment="Right">
+            <Button Content="Сохранить" Width="90" Height="30" Margin="5" 
+                   Click="BtnSave_Click" IsDefault="True"/>
+            <Button Content="Отмена" Width="90" Height="30" Margin="5" 
+                   Click="BtnCancel_Click" IsCancel="True"/>
+        </StackPanel>
+    </Grid>
+</Window>

+ 50 - 0
EditDriverWindow.xaml.cs

@@ -0,0 +1,50 @@
+using System.Windows;
+
+namespace WpfApp1
+{
+    public partial class EditDriverWindow : Window
+    {
+        public int DriverId { get; set; }
+        public string LastName { get; set; }
+        public string FullName { get; set; }
+        public string TabNumber { get; set; }
+
+        public EditDriverWindow()
+        {
+            InitializeComponent();
+        }
+
+        private void BtnSave_Click(object sender, RoutedEventArgs e)
+        {
+            if (string.IsNullOrWhiteSpace(txtLastName.Text) || string.IsNullOrWhiteSpace(txtTabNumber.Text))
+            {
+                MessageBox.Show("Заполните обязательные поля");
+                return;
+            }
+
+            LastName = txtLastName.Text.Trim();
+            FullName = txtFullName.Text.Trim();
+            TabNumber = txtTabNumber.Text.Trim();
+
+            this.DialogResult = true;
+            this.Close();
+        }
+
+        private void BtnCancel_Click(object sender, RoutedEventArgs e)
+        {
+            this.DialogResult = false;
+            this.Close();
+        }
+
+        protected override void OnContentRendered(System.EventArgs e)
+        {
+            base.OnContentRendered(e);
+            if (!string.IsNullOrEmpty(LastName))
+            {
+                txtLastName.Text = LastName;
+                txtFullName.Text = FullName;
+                txtTabNumber.Text = TabNumber;
+            }
+        }
+    }
+}

+ 40 - 0
LoginWindow.xaml

@@ -0,0 +1,40 @@
+<Window x:Class="WpfApp1.LoginWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        Title="Авторизация" Height="380" Width="380"
+        WindowStartupLocation="CenterScreen" 
+        ResizeMode="NoResize">
+
+    <Grid Margin="30">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <!-- Заголовок -->
+        <TextBlock Text="Вход в систему" FontSize="20" FontWeight="Bold" 
+                 HorizontalAlignment="Center" Margin="0,0,0,25"/>
+
+        <!-- Логин -->
+        <TextBlock Text="Логин:" Grid.Row="1" Margin="0,0,0,5"/>
+        <TextBox x:Name="txtLogin" Grid.Row="2" Height="30" Margin="0,0,0,15"/>
+
+        <!-- Пароль -->
+        <TextBlock Text="Пароль:" Grid.Row="3" Margin="0,0,0,5"/>
+        <PasswordBox x:Name="txtPassword" Grid.Row="4" Height="30" Margin="0,0,0,20"/>
+
+        <!-- Ошибка -->
+        <TextBlock x:Name="lblError" Grid.Row="5" Foreground="Red" 
+                 TextAlignment="Center" Margin="0,0,0,15" TextWrapping="Wrap"/>
+
+        <!-- Кнопка -->
+        <Button Content="Войти" Grid.Row="6" Width="120" Height="35" 
+               Click="BtnLogin_Click" IsDefault="True"
+               HorizontalAlignment="Center" VerticalAlignment="Top"/>
+    </Grid>
+</Window>

+ 70 - 0
LoginWindow.xaml.cs

@@ -0,0 +1,70 @@
+using Npgsql;
+using System;
+using System.Data;
+using System.Windows;
+using WpfApp1.Helpers;
+
+namespace WpfApp1
+{
+    public partial class LoginWindow : Window
+    {
+        private const string Conn = "Host=80.250.189.52;Port=5432;Database=dbwork;Username=kotov_aa;Password=0$s%MB3&F6#";
+
+        public LoginWindow()
+        {
+            InitializeComponent();
+        }
+
+        private void BtnLogin_Click(object sender, RoutedEventArgs e)
+        {
+            string login = txtLogin.Text.Trim();
+            string pass = txtPassword.Password;
+
+            if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(pass))
+            {
+                lblError.Text = "Заполните все поля";
+                return;
+            }
+
+            try
+            {
+                string sql = "SELECT id, username, role, password_hash FROM Users WHERE username = @login";
+                using var conn = new NpgsqlConnection(Conn);
+                conn.Open();
+                using var cmd = new NpgsqlCommand(sql, conn);
+                cmd.Parameters.AddWithValue("@login", login);
+
+                DataTable dt = new DataTable();
+                new NpgsqlDataAdapter(cmd).Fill(dt);
+
+                if (dt.Rows.Count == 0)
+                {
+                    lblError.Text = "Пользователь не найден";
+                    return;
+                }
+
+                DataRow row = dt.Rows[0];
+                string storedHash = row["password_hash"].ToString();
+
+                if (PasswordHelper.VerifyPassword(pass, storedHash))
+                {
+                    AppSession.UserId = Convert.ToInt32(row["id"]);
+                    AppSession.Username = row["username"].ToString();
+                    AppSession.Role = row["role"].ToString();
+
+                    MainWindow mainWindow = new MainWindow();
+                    mainWindow.Show();
+                    this.Close();
+                }
+                else
+                {
+                    lblError.Text = "Неверный пароль";
+                }
+            }
+            catch (Exception ex)
+            {
+                lblError.Text = "Ошибка: " + ex.Message;
+            }
+        }
+    }
+}

+ 44 - 0
MainWindow.xaml

@@ -0,0 +1,44 @@
+<Window x:Class="WpfApp1.MainWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        Title="Главное меню" Height="420" Width="420"
+        WindowStartupLocation="CenterScreen">
+
+    <Grid Margin="30">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+
+        <!-- Заголовок -->
+        <TextBlock Text="Главное меню" FontSize="22" FontWeight="Bold" 
+                 HorizontalAlignment="Center" Margin="0,0,0,15"/>
+
+        <!-- Информация о пользователе -->
+        <TextBlock x:Name="lblUser" Grid.Row="1" TextAlignment="Center" 
+                 FontSize="13" Foreground="Gray" Margin="0,0,0,30"/>
+
+        <!-- Кнопка "Заказы" -->
+        <Button Grid.Row="2" Content="Заказы (фильтры)" Width="220" Height="42" 
+               Margin="0,0,0,12" Click="BtnOrders_Click"
+               FontSize="14" Background="#3498DB" Foreground="White"/>
+
+        <!-- Кнопка "Водители" -->
+        <Button Grid.Row="3" Content="Водители (редактирование)" Width="220" Height="42" 
+               Margin="0,0,0,20" Click="BtnDrivers_Click"
+               FontSize="14" Background="#27AE60" Foreground="White"/>
+
+        <!-- Разделитель -->
+        <Border Grid.Row="4" Height="1" Background="LightGray" 
+               VerticalAlignment="Bottom" Margin="0,0,0,15"/>
+
+        <!-- Кнопка "Выход" -->
+        <Button Grid.Row="5" Content="Выход" Width="220" Height="38" 
+               Click="BtnLogout_Click"
+               FontSize="13" Background="#ECF0F1" Foreground="Gray"/>
+    </Grid>
+</Window>

+ 32 - 0
MainWindow.xaml.cs

@@ -0,0 +1,32 @@
+using System.Windows;
+
+namespace WpfApp1
+{
+    public partial class MainWindow : Window
+    {
+        public MainWindow()
+        {
+            InitializeComponent();
+            lblUser.Text = $"{AppSession.Username}\nРоль: {AppSession.Role}";
+        }
+
+        private void BtnOrders_Click(object sender, RoutedEventArgs e)
+        {
+            new OrdersWindow().Show();
+        }
+
+        private void BtnDrivers_Click(object sender, RoutedEventArgs e)
+        {
+            new DriversWindow().Show();
+        }
+
+        private void BtnLogout_Click(object sender, RoutedEventArgs e)
+        {
+            AppSession.UserId = 0;
+            AppSession.Username = null;
+            AppSession.Role = null;
+            new LoginWindow().Show();
+            this.Close();
+        }
+    }
+}

+ 33 - 0
OrdersWindow.xaml

@@ -0,0 +1,33 @@
+<Window x:Class="WpfApp1.OrdersWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        Title="Заказы" Height="450" Width="850"
+        WindowStartupLocation="CenterScreen">
+    <Grid Margin="15">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10">
+            <TextBlock Text="Клиент:" VerticalAlignment="Center" Margin="0,0,10,0"/>
+            <ComboBox x:Name="cmbClients" Width="200" DisplayMemberPath="companyname" SelectedValuePath="customerid"/>
+            <CheckBox x:Name="chkLate" Content="Только просроченные" VerticalAlignment="Center" Margin="20,0"/>
+            <Button Content="Применить" Width="80" Height="28" Margin="10,0" Click="BtnFilter_Click"/>
+            <Button Content="Сбросить" Width="80" Height="28" Click="BtnReset_Click"/>
+        </StackPanel>
+
+        <DataGrid x:Name="dgOrders" Grid.Row="1" 
+                  AutoGenerateColumns="False" IsReadOnly="True"
+                  AlternatingRowBackground="#F5F5F5">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="ID" Binding="{Binding orderid}" Width="50"/>
+                <DataGridTextColumn Header="Клиент" Binding="{Binding companyname}" Width="180"/>
+                <DataGridTextColumn Header="Дата заказа" Binding="{Binding orderdate, StringFormat=d}" Width="100"/>
+                <DataGridTextColumn Header="Плановая" Binding="{Binding plandate, StringFormat=d}" Width="100"/>
+                <DataGridTextColumn Header="Фактическая" Binding="{Binding factdate, StringFormat=d}" Width="100"/>
+                <DataGridTextColumn Header="Статус" Binding="{Binding status}" Width="120"/>
+            </DataGrid.Columns>
+        </DataGrid>
+    </Grid>
+</Window>

+ 78 - 0
OrdersWindow.xaml.cs

@@ -0,0 +1,78 @@
+using Npgsql;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace WpfApp1
+{
+    public partial class OrdersWindow : Window
+    {
+        private const string Conn = "Host=80.250.189.52;Port=5432;Database=dbwork;Username=kotov_aa;Password=0$s%MB3&F6#";
+
+        public OrdersWindow()
+        {
+            InitializeComponent();
+            LoadClients();
+            LoadOrders(null, false);
+        }
+
+        private void LoadClients()
+        {
+            using var conn = new NpgsqlConnection(Conn);
+            conn.Open();
+            var cmd = new NpgsqlCommand("SELECT customerid, companyname FROM Customers ORDER BY companyname", conn);
+            var adapter = new NpgsqlDataAdapter(cmd);
+            DataTable dt = new DataTable();
+            adapter.Fill(dt);
+            cmbClients.ItemsSource = dt.DefaultView;
+            cmbClients.SelectedIndex = -1;
+        }
+
+        private void LoadOrders(int? clientId, bool onlyLate)
+        {
+            string sql = "SELECT o.orderid, c.companyname, o.orderdate, o.plandate, o.factdate, o.status " +
+                         "FROM Orders o JOIN Customers c ON o.customerid = c.customerid WHERE 1=1";
+
+            var parameters = new List<NpgsqlParameter>();
+
+            if (clientId.HasValue)
+            {
+                sql += " AND o.customerid = @cid";
+                parameters.Add(new NpgsqlParameter("@cid", clientId.Value));
+            }
+
+            if (onlyLate)
+            {
+                sql += " AND (o.factdate > o.plandate OR (o.factdate IS NULL AND o.plandate < CURRENT_DATE))";
+            }
+
+            sql += " ORDER BY o.plandate DESC";
+
+            using var conn = new NpgsqlConnection(Conn);
+            conn.Open();
+            using var cmd = new NpgsqlCommand(sql, conn);
+            if (parameters.Count > 0) cmd.Parameters.AddRange(parameters.ToArray());
+
+            var adapter = new NpgsqlDataAdapter(cmd);
+            DataTable dt = new DataTable();
+            adapter.Fill(dt);
+            dgOrders.ItemsSource = dt.DefaultView;
+        }
+
+        private void BtnFilter_Click(object sender, RoutedEventArgs e)
+        {
+            int? clientId = cmbClients.SelectedValue != null ? Convert.ToInt32(cmbClients.SelectedValue) : null;
+            bool onlyLate = chkLate.IsChecked == true;
+            LoadOrders(clientId, onlyLate);
+        }
+
+        private void BtnReset_Click(object sender, RoutedEventArgs e)
+        {
+            cmbClients.SelectedIndex = -1;
+            chkLate.IsChecked = false;
+            LoadOrders(null, false);
+        }
+    }
+}

+ 34 - 0
PasswordHelper.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace WpfApp1.Helpers
+{
+    public static class PasswordHelper
+    {
+        private const int SaltSize = 16;
+        private const int HashSize = 32;
+        private const int Iterations = 100_000;
+
+        public static string HashPassword(string password)
+        {
+            byte[] salt = RandomNumberGenerator.GetBytes(SaltSize);
+            byte[] hash = Rfc2898DeriveBytes.Pbkdf2(
+                Encoding.UTF8.GetBytes(password), salt, Iterations, HashAlgorithmName.SHA256, HashSize);
+            return $"{Convert.ToBase64String(salt)}:{Convert.ToBase64String(hash)}";
+        }
+
+        public static bool VerifyPassword(string password, string storedHash)
+        {
+            string[] parts = storedHash.Split(':');
+            if (parts.Length != 2) return false;
+
+            byte[] salt = Convert.FromBase64String(parts[0]);
+            byte[] expectedHash = Convert.FromBase64String(parts[1]);
+            byte[] actualHash = Rfc2898DeriveBytes.Pbkdf2(
+                Encoding.UTF8.GetBytes(password), salt, Iterations, HashAlgorithmName.SHA256, HashSize);
+
+            return CryptographicOperations.FixedTimeEquals(actualHash, expectedHash);
+        }
+    }
+}

+ 8 - 0
System/Windows/Forms/FolderBrowserDialog.cs

@@ -0,0 +1,8 @@
+namespace System.Windows.Forms
+{
+    internal class FolderBrowserDialog
+    {
+        public string Description { get; set; }
+        public string SelectedPath { get; set; }
+    }
+}

+ 23 - 0
WpfApp1.csproj

@@ -0,0 +1,23 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net9.0-windows</TargetFramework>
+    <Nullable>enable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <UseWPF>true</UseWPF>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="BCrypt.Net-Next" Version="4.2.0" />
+    <PackageReference Include="CSharpMarkup.WinUI.LiveChartsCore.SkiaSharpView" Version="3.1.2" />
+    <PackageReference Include="CsvHelper" Version="33.1.0" />
+    <PackageReference Include="EPPlus" Version="8.4.0" />
+    <PackageReference Include="EPPlus.Interfaces" Version="8.4.0" />
+    <PackageReference Include="LiveChartsCore.SkiaSharpView.WPF" Version="2.0.0-rc6.1" />
+    <PackageReference Include="Npgsql" Version="10.0.0" />
+    <PackageReference Include="NuGet.Frameworks" Version="7.0.1" />
+    <PackageReference Include="OxyPlot.Wpf" Version="2.2.0" />
+  </ItemGroup>
+
+</Project>

+ 18 - 0
WpfApp1.csproj.user

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+  <ItemGroup>
+    <Compile Update="DriversWindow.xaml.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Update="EditDriverWindow.xaml.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Update="LoginWindow.xaml.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Update="OrdersWindow.xaml.cs">
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+</Project>

+ 25 - 0
WpfApp1.sln

@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36518.9 d17.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfApp1", "WpfApp1.csproj", "{F128A12D-8457-46FF-8418-6712B1BE36F9}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F128A12D-8457-46FF-8418-6712B1BE36F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F128A12D-8457-46FF-8418-6712B1BE36F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F128A12D-8457-46FF-8418-6712B1BE36F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F128A12D-8457-46FF-8418-6712B1BE36F9}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {79D3DFEA-AC57-429C-ABB6-83F776BDFC50}
+	EndGlobalSection
+EndGlobal

二进制
bin/Debug/net9.0-windows/BCrypt-Net-Next.dll


二进制
bin/Debug/net9.0-windows/CSharpMarkup.WinUI.LiveChartsCore.SkiaSharpView.dll


二进制
bin/Debug/net9.0-windows/CSharpMarkup.WinUI.dll


二进制
bin/Debug/net9.0-windows/CsvHelper.dll


二进制
bin/Debug/net9.0-windows/EPPlus.Interfaces.dll


二进制
bin/Debug/net9.0-windows/EPPlus.dll


二进制
bin/Debug/net9.0-windows/GLWpfControl.dll


二进制
bin/Debug/net9.0-windows/HarfBuzzSharp.dll


二进制
bin/Debug/net9.0-windows/LiveChartsCore.Behaviours.dll


二进制
bin/Debug/net9.0-windows/LiveChartsCore.SkiaSharpView.Uno.WinUI.dll


二进制
bin/Debug/net9.0-windows/LiveChartsCore.SkiaSharpView.WPF.dll


二进制
bin/Debug/net9.0-windows/LiveChartsCore.SkiaSharpView.dll


二进制
bin/Debug/net9.0-windows/LiveChartsCore.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.Configuration.Abstractions.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.Configuration.FileExtensions.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.Configuration.Json.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.Configuration.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.DependencyInjection.Abstractions.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.FileProviders.Abstractions.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.FileProviders.Physical.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.FileSystemGlobbing.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.Logging.Abstractions.dll


二进制
bin/Debug/net9.0-windows/Microsoft.Extensions.Primitives.dll


二进制
bin/Debug/net9.0-windows/Microsoft.IO.RecyclableMemoryStream.dll


二进制
bin/Debug/net9.0-windows/Npgsql.dll


二进制
bin/Debug/net9.0-windows/NuGet.Frameworks.dll


二进制
bin/Debug/net9.0-windows/OpenTK.dll


二进制
bin/Debug/net9.0-windows/OxyPlot.Wpf.Shared.dll


二进制
bin/Debug/net9.0-windows/OxyPlot.Wpf.dll


二进制
bin/Debug/net9.0-windows/OxyPlot.dll


二进制
bin/Debug/net9.0-windows/SkiaSharp.HarfBuzz.dll


二进制
bin/Debug/net9.0-windows/SkiaSharp.Views.Desktop.Common.dll


二进制
bin/Debug/net9.0-windows/SkiaSharp.Views.WPF.dll


二进制
bin/Debug/net9.0-windows/SkiaSharp.Views.Windows.dll


二进制
bin/Debug/net9.0-windows/SkiaSharp.dll


二进制
bin/Debug/net9.0-windows/System.Security.Cryptography.Pkcs.dll


二进制
bin/Debug/net9.0-windows/System.Security.Cryptography.Xml.dll


二进制
bin/Debug/net9.0-windows/Uno.Diagnostics.Eventing.dll


二进制
bin/Debug/net9.0-windows/Uno.Fonts.Fluent.dll


二进制
bin/Debug/net9.0-windows/Uno.Foundation.Logging.dll


二进制
bin/Debug/net9.0-windows/Uno.Foundation.dll


二进制
bin/Debug/net9.0-windows/Uno.UI.Composition.dll


二进制
bin/Debug/net9.0-windows/Uno.UI.Dispatching.dll


二进制
bin/Debug/net9.0-windows/Uno.UI.FluentTheme.dll


二进制
bin/Debug/net9.0-windows/Uno.UI.FluentTheme.v1.dll


二进制
bin/Debug/net9.0-windows/Uno.UI.FluentTheme.v2.dll


二进制
bin/Debug/net9.0-windows/Uno.UI.Toolkit.dll


二进制
bin/Debug/net9.0-windows/Uno.UI.dll


二进制
bin/Debug/net9.0-windows/Uno.Xaml.dll


二进制
bin/Debug/net9.0-windows/Uno.dll


+ 901 - 0
bin/Debug/net9.0-windows/WpfApp1.deps.json

@@ -0,0 +1,901 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v9.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v9.0": {
+      "WpfApp1/1.0.0": {
+        "dependencies": {
+          "BCrypt.Net-Next": "4.2.0",
+          "CSharpMarkup.WinUI.LiveChartsCore.SkiaSharpView": "3.1.2",
+          "CsvHelper": "33.1.0",
+          "EPPlus": "8.4.0",
+          "EPPlus.Interfaces": "8.4.0",
+          "LiveChartsCore.SkiaSharpView.WPF": "2.0.0-rc6.1",
+          "Npgsql": "10.0.0",
+          "NuGet.Frameworks": "7.0.1",
+          "OxyPlot.Wpf": "2.2.0"
+        },
+        "runtime": {
+          "WpfApp1.dll": {}
+        }
+      },
+      "BCrypt.Net-Next/4.2.0": {
+        "runtime": {
+          "lib/netstandard2.1/BCrypt-Net-Next.dll": {
+            "assemblyVersion": "4.2.0.0",
+            "fileVersion": "4.2.0.0"
+          }
+        }
+      },
+      "CSharpMarkup.WinUI/3.1.2": {
+        "dependencies": {
+          "Uno.WinUI": "6.0.465"
+        },
+        "runtime": {
+          "lib/net9.0/CSharpMarkup.WinUI.dll": {
+            "assemblyVersion": "3.1.2.0",
+            "fileVersion": "3.1.2.0"
+          }
+        }
+      },
+      "CSharpMarkup.WinUI.LiveChartsCore.SkiaSharpView/3.1.2": {
+        "dependencies": {
+          "CSharpMarkup.WinUI": "3.1.2",
+          "LiveChartsCore.SkiaSharpView.Uno.WinUI": "2.0.0-rc5.3"
+        },
+        "runtime": {
+          "lib/net8.0/CSharpMarkup.WinUI.LiveChartsCore.SkiaSharpView.dll": {
+            "assemblyVersion": "3.1.2.0",
+            "fileVersion": "3.1.2.0"
+          }
+        }
+      },
+      "CsvHelper/33.1.0": {
+        "runtime": {
+          "lib/net9.0/CsvHelper.dll": {
+            "assemblyVersion": "33.0.0.0",
+            "fileVersion": "33.1.0.26"
+          }
+        }
+      },
+      "EPPlus/8.4.0": {
+        "dependencies": {
+          "EPPlus.Interfaces": "8.4.0",
+          "Microsoft.Extensions.Configuration.Json": "9.0.3",
+          "Microsoft.IO.RecyclableMemoryStream": "3.0.1",
+          "System.Security.Cryptography.Pkcs": "9.0.3",
+          "System.Security.Cryptography.Xml": "9.0.3"
+        },
+        "runtime": {
+          "lib/net9.0/EPPlus.dll": {
+            "assemblyVersion": "8.4.0.0",
+            "fileVersion": "8.4.0.0"
+          }
+        }
+      },
+      "EPPlus.Interfaces/8.4.0": {
+        "runtime": {
+          "lib/net9.0/EPPlus.Interfaces.dll": {
+            "assemblyVersion": "8.4.0.0",
+            "fileVersion": "8.4.0.0"
+          }
+        }
+      },
+      "HarfBuzzSharp/8.3.1.1": {
+        "dependencies": {
+          "HarfBuzzSharp.NativeAssets.Win32": "8.3.1.1",
+          "HarfBuzzSharp.NativeAssets.macOS": "8.3.1.1"
+        },
+        "runtime": {
+          "lib/net8.0/HarfBuzzSharp.dll": {
+            "assemblyVersion": "1.0.0.0",
+            "fileVersion": "8.3.1.1"
+          }
+        }
+      },
+      "HarfBuzzSharp.NativeAssets.macOS/8.3.1.1": {
+        "runtimeTargets": {
+          "runtimes/osx/native/libHarfBuzzSharp.dylib": {
+            "rid": "osx",
+            "assetType": "native",
+            "fileVersion": "0.0.0.0"
+          }
+        }
+      },
+      "HarfBuzzSharp.NativeAssets.Win32/8.3.1.1": {
+        "runtimeTargets": {
+          "runtimes/win-arm64/native/libHarfBuzzSharp.dll": {
+            "rid": "win-arm64",
+            "assetType": "native",
+            "fileVersion": "0.0.0.0"
+          },
+          "runtimes/win-x64/native/libHarfBuzzSharp.dll": {
+            "rid": "win-x64",
+            "assetType": "native",
+            "fileVersion": "0.0.0.0"
+          },
+          "runtimes/win-x86/native/libHarfBuzzSharp.dll": {
+            "rid": "win-x86",
+            "assetType": "native",
+            "fileVersion": "0.0.0.0"
+          }
+        }
+      },
+      "LiveChartsCore/2.0.0-rc6.1": {
+        "runtime": {
+          "lib/net8.0/LiveChartsCore.dll": {
+            "assemblyVersion": "2.0.0.0",
+            "fileVersion": "2.0.0.0"
+          }
+        }
+      },
+      "LiveChartsCore.Behaviours/2.0.0-rc5.3": {
+        "dependencies": {
+          "LiveChartsCore": "2.0.0-rc6.1"
+        },
+        "runtime": {
+          "lib/net8.0/LiveChartsCore.Behaviours.dll": {
+            "assemblyVersion": "2.0.0.0",
+            "fileVersion": "2.0.0.0"
+          }
+        }
+      },
+      "LiveChartsCore.SkiaSharpView/2.0.0-rc6.1": {
+        "dependencies": {
+          "LiveChartsCore": "2.0.0-rc6.1",
+          "SkiaSharp": "3.119.0",
+          "SkiaSharp.HarfBuzz": "3.119.0"
+        },
+        "runtime": {
+          "lib/net8.0/LiveChartsCore.SkiaSharpView.dll": {
+            "assemblyVersion": "2.0.0.0",
+            "fileVersion": "2.0.0.0"
+          }
+        }
+      },
+      "LiveChartsCore.SkiaSharpView.Uno.WinUI/2.0.0-rc5.3": {
+        "dependencies": {
+          "LiveChartsCore.Behaviours": "2.0.0-rc5.3",
+          "LiveChartsCore.SkiaSharpView": "2.0.0-rc6.1",
+          "SkiaSharp.Views.Uno.WinUI": "2.88.9",
+          "Uno.WinUI": "6.0.465"
+        },
+        "runtime": {
+          "lib/net8.0/LiveChartsCore.SkiaSharpView.Uno.WinUI.dll": {
+            "assemblyVersion": "2.0.0.0",
+            "fileVersion": "2.0.0.0"
+          }
+        }
+      },
+      "LiveChartsCore.SkiaSharpView.WPF/2.0.0-rc6.1": {
+        "dependencies": {
+          "LiveChartsCore.SkiaSharpView": "2.0.0-rc6.1",
+          "SkiaSharp.HarfBuzz": "3.119.0",
+          "SkiaSharp.Views.WPF": "3.119.0"
+        },
+        "runtime": {
+          "lib/net462/LiveChartsCore.SkiaSharpView.WPF.dll": {
+            "assemblyVersion": "2.0.0.0",
+            "fileVersion": "2.0.0.0"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration/9.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
+          "Microsoft.Extensions.Primitives": "9.0.3"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.325.11113"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.Abstractions/9.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "9.0.3"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.325.11113"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.FileExtensions/9.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "9.0.3",
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3",
+          "Microsoft.Extensions.FileProviders.Physical": "9.0.3",
+          "Microsoft.Extensions.Primitives": "9.0.3"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.325.11113"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.Json/9.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "9.0.3",
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
+          "Microsoft.Extensions.Configuration.FileExtensions": "9.0.3",
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.Json.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.325.11113"
+          }
+        }
+      },
+      "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": {
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.24.52809"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileProviders.Abstractions/9.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "9.0.3"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.325.11113"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileProviders.Physical/9.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3",
+          "Microsoft.Extensions.FileSystemGlobbing": "9.0.3",
+          "Microsoft.Extensions.Primitives": "9.0.3"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.FileProviders.Physical.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.325.11113"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileSystemGlobbing/9.0.3": {
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.325.11113"
+          }
+        }
+      },
+      "Microsoft.Extensions.Logging.Abstractions/9.0.0": {
+        "dependencies": {
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.24.52809"
+          }
+        }
+      },
+      "Microsoft.Extensions.Primitives/9.0.3": {
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Primitives.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.325.11113"
+          }
+        }
+      },
+      "Microsoft.IO.RecyclableMemoryStream/3.0.1": {
+        "runtime": {
+          "lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll": {
+            "assemblyVersion": "3.0.1.0",
+            "fileVersion": "3.0.1.0"
+          }
+        }
+      },
+      "Npgsql/10.0.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Logging.Abstractions": "9.0.0"
+        },
+        "runtime": {
+          "lib/net9.0/Npgsql.dll": {
+            "assemblyVersion": "10.0.0.0",
+            "fileVersion": "10.0.0.0"
+          }
+        }
+      },
+      "NuGet.Frameworks/7.0.1": {
+        "runtime": {
+          "lib/net8.0/NuGet.Frameworks.dll": {
+            "assemblyVersion": "7.0.1.0",
+            "fileVersion": "7.0.1.1"
+          }
+        }
+      },
+      "OpenTK/3.3.1": {
+        "runtime": {
+          "lib/net20/OpenTK.dll": {
+            "assemblyVersion": "3.3.1.0",
+            "fileVersion": "3.3.1.0"
+          }
+        }
+      },
+      "OpenTK.GLWpfControl/3.3.0": {
+        "dependencies": {
+          "OpenTK": "3.3.1"
+        },
+        "runtime": {
+          "lib/net452/GLWpfControl.dll": {
+            "assemblyVersion": "3.3.0.0",
+            "fileVersion": "3.3.0.0"
+          }
+        }
+      },
+      "OxyPlot.Core/2.2.0": {
+        "runtime": {
+          "lib/net8.0/OxyPlot.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.0"
+          }
+        }
+      },
+      "OxyPlot.Wpf/2.2.0": {
+        "dependencies": {
+          "OxyPlot.Core": "2.2.0",
+          "OxyPlot.Wpf.Shared": "2.2.0"
+        },
+        "runtime": {
+          "lib/net8.0-windows7.0/OxyPlot.Wpf.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.0"
+          }
+        }
+      },
+      "OxyPlot.Wpf.Shared/2.2.0": {
+        "dependencies": {
+          "OxyPlot.Core": "2.2.0"
+        },
+        "runtime": {
+          "lib/net8.0-windows7.0/OxyPlot.Wpf.Shared.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.0"
+          }
+        }
+      },
+      "SkiaSharp/3.119.0": {
+        "dependencies": {
+          "SkiaSharp.NativeAssets.Win32": "3.119.0",
+          "SkiaSharp.NativeAssets.macOS": "3.119.0"
+        },
+        "runtime": {
+          "lib/net8.0/SkiaSharp.dll": {
+            "assemblyVersion": "3.119.0.0",
+            "fileVersion": "3.119.0.0"
+          }
+        }
+      },
+      "SkiaSharp.HarfBuzz/3.119.0": {
+        "dependencies": {
+          "HarfBuzzSharp": "8.3.1.1",
+          "SkiaSharp": "3.119.0"
+        },
+        "runtime": {
+          "lib/net8.0/SkiaSharp.HarfBuzz.dll": {
+            "assemblyVersion": "3.119.0.0",
+            "fileVersion": "3.119.0.0"
+          }
+        }
+      },
+      "SkiaSharp.NativeAssets.macOS/3.119.0": {
+        "runtimeTargets": {
+          "runtimes/osx/native/libSkiaSharp.dylib": {
+            "rid": "osx",
+            "assetType": "native",
+            "fileVersion": "0.0.0.0"
+          }
+        }
+      },
+      "SkiaSharp.NativeAssets.WebAssembly/2.88.9": {},
+      "SkiaSharp.NativeAssets.Win32/3.119.0": {
+        "runtimeTargets": {
+          "runtimes/win-arm64/native/libSkiaSharp.dll": {
+            "rid": "win-arm64",
+            "assetType": "native",
+            "fileVersion": "0.0.0.0"
+          },
+          "runtimes/win-x64/native/libSkiaSharp.dll": {
+            "rid": "win-x64",
+            "assetType": "native",
+            "fileVersion": "0.0.0.0"
+          },
+          "runtimes/win-x86/native/libSkiaSharp.dll": {
+            "rid": "win-x86",
+            "assetType": "native",
+            "fileVersion": "0.0.0.0"
+          }
+        }
+      },
+      "SkiaSharp.Views.Desktop.Common/3.119.0": {
+        "dependencies": {
+          "SkiaSharp": "3.119.0"
+        },
+        "runtime": {
+          "lib/net8.0/SkiaSharp.Views.Desktop.Common.dll": {
+            "assemblyVersion": "3.119.0.0",
+            "fileVersion": "3.119.0.0"
+          }
+        }
+      },
+      "SkiaSharp.Views.Uno.WinUI/2.88.9": {
+        "dependencies": {
+          "SkiaSharp": "3.119.0",
+          "SkiaSharp.NativeAssets.WebAssembly": "2.88.9",
+          "Uno.WinUI": "6.0.465"
+        },
+        "runtime": {
+          "lib/net7.0/SkiaSharp.Views.Windows.dll": {
+            "assemblyVersion": "2.88.0.0",
+            "fileVersion": "2.88.9.0"
+          }
+        }
+      },
+      "SkiaSharp.Views.WPF/3.119.0": {
+        "dependencies": {
+          "OpenTK": "3.3.1",
+          "OpenTK.GLWpfControl": "3.3.0",
+          "SkiaSharp": "3.119.0",
+          "SkiaSharp.Views.Desktop.Common": "3.119.0"
+        },
+        "runtime": {
+          "lib/net462/SkiaSharp.Views.WPF.dll": {
+            "assemblyVersion": "3.119.0.0",
+            "fileVersion": "3.119.0.0"
+          }
+        }
+      },
+      "System.Security.Cryptography.Pkcs/9.0.3": {},
+      "System.Security.Cryptography.Xml/9.0.3": {
+        "dependencies": {
+          "System.Security.Cryptography.Pkcs": "9.0.3"
+        }
+      },
+      "Uno.Diagnostics.Eventing/2.0.1": {
+        "runtime": {
+          "lib/net5.0/Uno.Diagnostics.Eventing.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          }
+        }
+      },
+      "Uno.Fonts.Fluent/2.6.1": {
+        "runtime": {
+          "lib/netstandard1.0/Uno.Fonts.Fluent.dll": {
+            "assemblyVersion": "1.0.0.0",
+            "fileVersion": "1.0.0.0"
+          }
+        }
+      },
+      "Uno.Foundation/6.0.465": {
+        "runtime": {
+          "lib/net9.0/Uno.Foundation.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          }
+        }
+      },
+      "Uno.Foundation.Logging/6.0.465": {
+        "runtime": {
+          "lib/net8.0/Uno.Foundation.Logging.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          }
+        }
+      },
+      "Uno.WinRT/6.0.465": {
+        "dependencies": {
+          "Uno.Foundation": "6.0.465"
+        },
+        "runtime": {
+          "lib/net9.0/Uno.UI.Dispatching.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          },
+          "lib/net9.0/Uno.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          }
+        }
+      },
+      "Uno.WinUI/6.0.465": {
+        "dependencies": {
+          "Uno.Diagnostics.Eventing": "2.0.1",
+          "Uno.Fonts.Fluent": "2.6.1",
+          "Uno.Foundation.Logging": "6.0.465",
+          "Uno.WinRT": "6.0.465"
+        },
+        "runtime": {
+          "lib/net9.0/Uno.UI.Composition.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          },
+          "lib/net9.0/Uno.UI.FluentTheme.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          },
+          "lib/net9.0/Uno.UI.FluentTheme.v1.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          },
+          "lib/net9.0/Uno.UI.FluentTheme.v2.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          },
+          "lib/net9.0/Uno.UI.Toolkit.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          },
+          "lib/net9.0/Uno.UI.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          },
+          "lib/net9.0/Uno.Xaml.dll": {
+            "assemblyVersion": "255.255.255.255",
+            "fileVersion": "255.255.255.255"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "WpfApp1/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "BCrypt.Net-Next/4.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-gwLD2KfCuwQesP17aVh4h6lpiMPEVt5Lbpndo0ej903hNUUTtyxt3ARdDjmuydBRTAUICc7OVKVbaOvc6SQYXA==",
+      "path": "bcrypt.net-next/4.2.0",
+      "hashPath": "bcrypt.net-next.4.2.0.nupkg.sha512"
+    },
+    "CSharpMarkup.WinUI/3.1.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-SDAp3a1O1BJJqzrp/bvLoDhIBYsaw+DCv2mW6OMfOJItMR9JK2YK0fUKwr6XCPqug1KGMcjFTW8t4FLWc2omxg==",
+      "path": "csharpmarkup.winui/3.1.2",
+      "hashPath": "csharpmarkup.winui.3.1.2.nupkg.sha512"
+    },
+    "CSharpMarkup.WinUI.LiveChartsCore.SkiaSharpView/3.1.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-HATSQmLzz8tu5CGCy5qeHr+g0pRkp5GeZ4EzVyf8buS+wAy5ByQrLUxQjjh7pKi82VmWvLcoROLLOTBF1WpLqg==",
+      "path": "csharpmarkup.winui.livechartscore.skiasharpview/3.1.2",
+      "hashPath": "csharpmarkup.winui.livechartscore.skiasharpview.3.1.2.nupkg.sha512"
+    },
+    "CsvHelper/33.1.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-kqfTOZGrn7NarNeXgjh86JcpTHUoeQDMB8t9NVa/ZtlSYiV1rxfRnQ49WaJsob4AiGrbK0XDzpyKkBwai4F8eg==",
+      "path": "csvhelper/33.1.0",
+      "hashPath": "csvhelper.33.1.0.nupkg.sha512"
+    },
+    "EPPlus/8.4.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-0iZvj43+xgJUuAsbxiGeKF/ZydUSjzUidK2w9SX8wOBf5z2j5cKctxp7EsCzArimLys/cqrwSaj90B6eU6FFkw==",
+      "path": "epplus/8.4.0",
+      "hashPath": "epplus.8.4.0.nupkg.sha512"
+    },
+    "EPPlus.Interfaces/8.4.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-QaEzDFG2vcQMPqUmoWv0vBTObtH8hffQmyDr2WkqRYF/nFSn2pkdBB4vudcd/EIv0N8M3P1fzzkPQgEWsFnUmA==",
+      "path": "epplus.interfaces/8.4.0",
+      "hashPath": "epplus.interfaces.8.4.0.nupkg.sha512"
+    },
+    "HarfBuzzSharp/8.3.1.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-tLZN66oe/uiRPTZfrCU4i8ScVGwqHNh5MHrXj0yVf4l7Mz0FhTGnQ71RGySROTmdognAs0JtluHkL41pIabWuQ==",
+      "path": "harfbuzzsharp/8.3.1.1",
+      "hashPath": "harfbuzzsharp.8.3.1.1.nupkg.sha512"
+    },
+    "HarfBuzzSharp.NativeAssets.macOS/8.3.1.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-jbtCsgftcaFLCA13tVKo5iWdElJScrulLTKJre36O4YQTIlwDtPPqhRZNk+Y0vv4D1gxbscasGRucUDfS44ofQ==",
+      "path": "harfbuzzsharp.nativeassets.macos/8.3.1.1",
+      "hashPath": "harfbuzzsharp.nativeassets.macos.8.3.1.1.nupkg.sha512"
+    },
+    "HarfBuzzSharp.NativeAssets.Win32/8.3.1.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-UsJtQsfAJoFDZrXc4hCUfRPMqccfKZ0iumJ/upcUjz/cmsTgVFGNEL5yaJWmkqsuFYdMWbj/En5/kS4PFl9hBA==",
+      "path": "harfbuzzsharp.nativeassets.win32/8.3.1.1",
+      "hashPath": "harfbuzzsharp.nativeassets.win32.8.3.1.1.nupkg.sha512"
+    },
+    "LiveChartsCore/2.0.0-rc6.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-yaeFXCpH7AspjMKzXNdfr1Ikg06Dm+a4XRW/8wBtHAa/TEVJLY8yBsG6pNpjrPk+FpRaSImlNYw7pv298W1XPw==",
+      "path": "livechartscore/2.0.0-rc6.1",
+      "hashPath": "livechartscore.2.0.0-rc6.1.nupkg.sha512"
+    },
+    "LiveChartsCore.Behaviours/2.0.0-rc5.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-J5wnb8yyIB+UTHYoj1+cuoHmgatNtjW5sPgCUyHx4D3MRkZTjC8dHNGksXbn4ydJOTo9j+pceZKwv6THmjiZng==",
+      "path": "livechartscore.behaviours/2.0.0-rc5.3",
+      "hashPath": "livechartscore.behaviours.2.0.0-rc5.3.nupkg.sha512"
+    },
+    "LiveChartsCore.SkiaSharpView/2.0.0-rc6.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-FU+0uIxL3xR631+4aN296L+M3f6qWrIEUJr8+SSmcGVVa27iB0+ko55IRInZGdYlmaR+8mRTPAXObXT6/1EMDQ==",
+      "path": "livechartscore.skiasharpview/2.0.0-rc6.1",
+      "hashPath": "livechartscore.skiasharpview.2.0.0-rc6.1.nupkg.sha512"
+    },
+    "LiveChartsCore.SkiaSharpView.Uno.WinUI/2.0.0-rc5.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-+ng1hwXbPzNYZA8nZ67BYAyJLu9ScdRT4G6rTMLnMAYxiD4jaTwgE6FvUuXGNTvb/oq97FVxlYyYO01DrcCR9g==",
+      "path": "livechartscore.skiasharpview.uno.winui/2.0.0-rc5.3",
+      "hashPath": "livechartscore.skiasharpview.uno.winui.2.0.0-rc5.3.nupkg.sha512"
+    },
+    "LiveChartsCore.SkiaSharpView.WPF/2.0.0-rc6.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-8OjtKoZc1Hnr6mXPQM5pnjo0A/SW07K/yjTvXCToJOyPyGj8GrWlR3VabjN+jVuf0IlwZU8Ewzc1QDBe9sI7wQ==",
+      "path": "livechartscore.skiasharpview.wpf/2.0.0-rc6.1",
+      "hashPath": "livechartscore.skiasharpview.wpf.2.0.0-rc6.1.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-RIEeZxWYm77+OWLwgik7DzSVSONjqkmcbuCb1koZdGAV7BgOUWnLz80VMyHZMw3onrVwFCCMHBBdruBPuQTvkg==",
+      "path": "microsoft.extensions.configuration/9.0.3",
+      "hashPath": "microsoft.extensions.configuration.9.0.3.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.Abstractions/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-q5qlbm6GRUrle2ZZxy9aqS/wWoc+mRD3JeP6rcpiJTh5XcemYkplAcJKq8lU11ZfPom5lfbZZfnQvDqcUhqD5Q==",
+      "path": "microsoft.extensions.configuration.abstractions/9.0.3",
+      "hashPath": "microsoft.extensions.configuration.abstractions.9.0.3.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.FileExtensions/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-tBNMSDJ2q7WQK2zwPhHY5I/q95t7sf6dT079mGrNm0yOZF/gM9JvR/LtCb/rwhRmh7A6XMnzv5WbpCh9KLq9EQ==",
+      "path": "microsoft.extensions.configuration.fileextensions/9.0.3",
+      "hashPath": "microsoft.extensions.configuration.fileextensions.9.0.3.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.Json/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-mjkp3ZwynNacZk4uq93I0DyCY48FZmi3yRV0xlfeDuWh44KcDunPXHwt8IWr4kL7cVM6eiFVe6YTJg97KzUAUA==",
+      "path": "microsoft.extensions.configuration.json/9.0.3",
+      "hashPath": "microsoft.extensions.configuration.json.9.0.3.nupkg.sha512"
+    },
+    "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-+6f2qv2a3dLwd5w6JanPIPs47CxRbnk+ZocMJUhv9NxP88VlOcJYZs9jY+MYSjxvady08bUZn6qgiNh7DadGgg==",
+      "path": "microsoft.extensions.dependencyinjection.abstractions/9.0.0",
+      "hashPath": "microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileProviders.Abstractions/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-umczZ3+QPpzlrW/lkvy+IB0p52+qZ5w++aqx2lTCMOaPKzwcbVdrJgiQ3ajw5QWBp7gChLUiCYkSlWUpfjv24g==",
+      "path": "microsoft.extensions.fileproviders.abstractions/9.0.3",
+      "hashPath": "microsoft.extensions.fileproviders.abstractions.9.0.3.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileProviders.Physical/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-th2+tQBV5oWjgKhip9GjiIv2AEK3QvfAO3tZcqV3F3dEt5D6Gb411RntCj1+8GS9HaRRSxjSGx/fCrMqIjkb1Q==",
+      "path": "microsoft.extensions.fileproviders.physical/9.0.3",
+      "hashPath": "microsoft.extensions.fileproviders.physical.9.0.3.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileSystemGlobbing/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-Rec77KHk4iNpFznHi5/6wF3MlUDcKqg26t8gRYbUm1PSukZ4B6mrXpZsJSNOiwyhhQVkjYbaoZxi5XJgRQ5lFg==",
+      "path": "microsoft.extensions.filesystemglobbing/9.0.3",
+      "hashPath": "microsoft.extensions.filesystemglobbing.9.0.3.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Logging.Abstractions/9.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-g0UfujELzlLbHoVG8kPKVBaW470Ewi+jnptGS9KUi6jcb+k2StujtK3m26DFSGGwQ/+bVgZfsWqNzlP6YOejvw==",
+      "path": "microsoft.extensions.logging.abstractions/9.0.0",
+      "hashPath": "microsoft.extensions.logging.abstractions.9.0.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Primitives/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-yCCJHvBcRyqapMSNzP+kTc57Eaavq2cr5Tmuil6/XVnipQf5xmskxakSQ1enU6S4+fNg3sJ27WcInV64q24JsA==",
+      "path": "microsoft.extensions.primitives/9.0.3",
+      "hashPath": "microsoft.extensions.primitives.9.0.3.nupkg.sha512"
+    },
+    "Microsoft.IO.RecyclableMemoryStream/3.0.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-s/s20YTVY9r9TPfTrN5g8zPF1YhwxyqO6PxUkrYTGI2B+OGPe9AdajWZrLhFqXIvqIW23fnUE4+ztrUWNU1+9g==",
+      "path": "microsoft.io.recyclablememorystream/3.0.1",
+      "hashPath": "microsoft.io.recyclablememorystream.3.0.1.nupkg.sha512"
+    },
+    "Npgsql/10.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-xZAYhPOU2rUIFpV48xsqhCx9vXs6Y+0jX2LCoSEfDFYMw9jtAOUk3iQsCnDLrFIv9NT3JGMihn7nnuZsPKqJmA==",
+      "path": "npgsql/10.0.0",
+      "hashPath": "npgsql.10.0.0.nupkg.sha512"
+    },
+    "NuGet.Frameworks/7.0.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-dUDwg8VYTyT+ZbLdC7hUUHFF530HeRl4jcxclKJY0o96f3nv0eZvojXwjRkq2HKzuyRCcVD4T24aEF83CUmBzA==",
+      "path": "nuget.frameworks/7.0.1",
+      "hashPath": "nuget.frameworks.7.0.1.nupkg.sha512"
+    },
+    "OpenTK/3.3.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-vJ00JIs0EOEhqU3+1w6ocurNUFaewd7YXV8sixI029AQeQaht0QjDGgXm2Fk/y8A5Wtx6UsmrjJDKi4USoVeSg==",
+      "path": "opentk/3.3.1",
+      "hashPath": "opentk.3.3.1.nupkg.sha512"
+    },
+    "OpenTK.GLWpfControl/3.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-viHlwA0RIYLA1EyoA+gOkfqpA9xMZV6HigVYhaHaEsYb3jk518RdCKEdFggu/P4oYUNYZmmHaUYDC9pwarkXjA==",
+      "path": "opentk.glwpfcontrol/3.3.0",
+      "hashPath": "opentk.glwpfcontrol.3.3.0.nupkg.sha512"
+    },
+    "OxyPlot.Core/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-QhXNdXR5FPpro/VoLx3BOp6AhQo7YrbfmWEZ9cgY+pnYM7RYORZjnu+aDMA8ka9A1r8hLkX//NbCPZNUv+l8qA==",
+      "path": "oxyplot.core/2.2.0",
+      "hashPath": "oxyplot.core.2.2.0.nupkg.sha512"
+    },
+    "OxyPlot.Wpf/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-69KzgsMWpJSZmeXZt07FwfV7B1D4CM1nl0MWMj4wjrCsb3USBMo32up1+fQIjxp5tHCPdGwX9VWhSxW8nsY7pQ==",
+      "path": "oxyplot.wpf/2.2.0",
+      "hashPath": "oxyplot.wpf.2.2.0.nupkg.sha512"
+    },
+    "OxyPlot.Wpf.Shared/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-JoOD/feTOlKFmgXqeTNrl4Ze0i0L6WizPapNw9pXwot+cnI0qhFgYv3tFjlSdu51hZw0EgmcgeRXMtm5bkueYA==",
+      "path": "oxyplot.wpf.shared/2.2.0",
+      "hashPath": "oxyplot.wpf.shared.2.2.0.nupkg.sha512"
+    },
+    "SkiaSharp/3.119.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-gR9yVoOta2Mc1Rxt15LD65AckfHMfwjIs/3kkD59C9bT2nYYISsE6uz3t4aMPNHA6CgsIL0Ssn+jE5OVilZ1yw==",
+      "path": "skiasharp/3.119.0",
+      "hashPath": "skiasharp.3.119.0.nupkg.sha512"
+    },
+    "SkiaSharp.HarfBuzz/3.119.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-5ocGzl+RYEZFnUPUbModshnEFvKTku4hTtOBsLvy5MCK2KAHjq5Nw2+uAVUx79Rjh0z8fTojT6ZVav8MJgW0ug==",
+      "path": "skiasharp.harfbuzz/3.119.0",
+      "hashPath": "skiasharp.harfbuzz.3.119.0.nupkg.sha512"
+    },
+    "SkiaSharp.NativeAssets.macOS/3.119.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-YE1vNn0Nyw2PWtv7hw1PYkKJO0itFiQp9vSqGppZUKzQJqwp28a2jgdCMPfYtOiR8KCnDgZqQoynqJRRaE2ZVg==",
+      "path": "skiasharp.nativeassets.macos/3.119.0",
+      "hashPath": "skiasharp.nativeassets.macos.3.119.0.nupkg.sha512"
+    },
+    "SkiaSharp.NativeAssets.WebAssembly/2.88.9": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-kt06RccBHSnAs2wDYdBSfsjIDbY3EpsOVqnlDgKdgvyuRA8ZFDaHRdWNx1VHjGgYzmnFCGiTJBnXFl5BqGwGnA==",
+      "path": "skiasharp.nativeassets.webassembly/2.88.9",
+      "hashPath": "skiasharp.nativeassets.webassembly.2.88.9.nupkg.sha512"
+    },
+    "SkiaSharp.NativeAssets.Win32/3.119.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-IwC9yx36lOdXVT2DjgmWHl1qkVspfj8ctd4+li8CNnvqdfaTolXCOh6TLznURcPAvzatx9K/tLOB7zT6T8EA9w==",
+      "path": "skiasharp.nativeassets.win32/3.119.0",
+      "hashPath": "skiasharp.nativeassets.win32.3.119.0.nupkg.sha512"
+    },
+    "SkiaSharp.Views.Desktop.Common/3.119.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-KST7Q3n+X5BhDj1aKTJXk9tITWWznveka9n+pBjOtE53Omc+wlZR0s4fQStybWCVVaWG9eaeOMaw93J3zEMklA==",
+      "path": "skiasharp.views.desktop.common/3.119.0",
+      "hashPath": "skiasharp.views.desktop.common.3.119.0.nupkg.sha512"
+    },
+    "SkiaSharp.Views.Uno.WinUI/2.88.9": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-ScHWyv/kJuNWUmaXfYqz1ik/qRTazJg5+hNSWTV/2L33r5UVyC+aRCHr8tjhecAxL593+6ECe4FqQwqbxinKSg==",
+      "path": "skiasharp.views.uno.winui/2.88.9",
+      "hashPath": "skiasharp.views.uno.winui.2.88.9.nupkg.sha512"
+    },
+    "SkiaSharp.Views.WPF/3.119.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-1Dmj9RlBW/gvmJwSUER+N9plA/kcWOgiL5g3q2DB+USVQav8rQtfOZIQZ1Wt/AqhwepOacv1M6pZKDWtXmwDAg==",
+      "path": "skiasharp.views.wpf/3.119.0",
+      "hashPath": "skiasharp.views.wpf.3.119.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Pkcs/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-4XYeGOYBYtvaF2bH+cps+vPWjI5jQCWR7R1B4dI9I1Da9JQrXYP7mxdci+zKV2Ie4JafaOnOoNaDtzxkaXUxCg==",
+      "path": "system.security.cryptography.pkcs/9.0.3",
+      "hashPath": "system.security.cryptography.pkcs.9.0.3.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Xml/9.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-dPG84G5/szhNQ8utXUB4NmrJLGvFe8yd4P0MFjy0/VNxkQNGR6CkkLjptkO5b5rcnw/4c2xDKcrwLxgc1zKWgg==",
+      "path": "system.security.cryptography.xml/9.0.3",
+      "hashPath": "system.security.cryptography.xml.9.0.3.nupkg.sha512"
+    },
+    "Uno.Diagnostics.Eventing/2.0.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-Hd03em+Bga+w+ljCtiyc+713PQDtCB0Qkw3sBggvXXdDB2URwEc3N4TnM3vFeXpmHHZGM7dN7D8qxfiGoEEHzw==",
+      "path": "uno.diagnostics.eventing/2.0.1",
+      "hashPath": "uno.diagnostics.eventing.2.0.1.nupkg.sha512"
+    },
+    "Uno.Fonts.Fluent/2.6.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-mV1JWlpU9e6uWf/hamfTv+ysSRlRjjao1WtewGUtFz2/tB83C5h10gZReiWX4ZQXG2P0bgI/yx1ZxPYfiM3Hcg==",
+      "path": "uno.fonts.fluent/2.6.1",
+      "hashPath": "uno.fonts.fluent.2.6.1.nupkg.sha512"
+    },
+    "Uno.Foundation/6.0.465": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-rzOaarM1Cw7uL8AfMmo5QCHVCjTA0nTigZO3tPcWNClmpBmLADTzrJVSFm9x6nT3FlkVj6kP3ObVABpN9Ugpmw==",
+      "path": "uno.foundation/6.0.465",
+      "hashPath": "uno.foundation.6.0.465.nupkg.sha512"
+    },
+    "Uno.Foundation.Logging/6.0.465": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-k73NaJwxgmmMTJiBo+CJO4TbACc66stdXLDd9fIxqRo5qPvGWakWJvDgxftkBf3D/IY61UH7/K3mpJfSSRJmrw==",
+      "path": "uno.foundation.logging/6.0.465",
+      "hashPath": "uno.foundation.logging.6.0.465.nupkg.sha512"
+    },
+    "Uno.WinRT/6.0.465": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-cVYCU2IBXwZEhBkwsZSE1LfGgMzJm2XvrGY9sXMZRLJC7+772g0/fuZPCYpMpBVUKoeeDkUCo1YbDUacxH0TIA==",
+      "path": "uno.winrt/6.0.465",
+      "hashPath": "uno.winrt.6.0.465.nupkg.sha512"
+    },
+    "Uno.WinUI/6.0.465": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-WkQhdarcmbCgYvKfSrE+gkBZLFafzYOqr3vrmZTRyPlMsFeVgTdW/L4Ovpq2ErIk0hB7s0keWjbHHda70iBsNw==",
+      "path": "uno.winui/6.0.465",
+      "hashPath": "uno.winui.6.0.465.nupkg.sha512"
+    }
+  }
+}

二进制
bin/Debug/net9.0-windows/WpfApp1.dll


二进制
bin/Debug/net9.0-windows/WpfApp1.exe


二进制
bin/Debug/net9.0-windows/WpfApp1.pdb


+ 20 - 0
bin/Debug/net9.0-windows/WpfApp1.runtimeconfig.json

@@ -0,0 +1,20 @@
+{
+  "runtimeOptions": {
+    "tfm": "net9.0",
+    "frameworks": [
+      {
+        "name": "Microsoft.NETCore.App",
+        "version": "9.0.0"
+      },
+      {
+        "name": "Microsoft.WindowsDesktop.App",
+        "version": "9.0.0"
+      }
+    ],
+    "configProperties": {
+      "Windows.ApplicationModel.DataTransfer.DragDrop.ExternalSupport": true,
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
+      "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
+    }
+  }
+}

二进制
bin/Debug/net9.0-windows/runtimes/osx/native/libHarfBuzzSharp.dylib


二进制
bin/Debug/net9.0-windows/runtimes/osx/native/libSkiaSharp.dylib


部分文件因为文件数量过多而无法显示