Forráskód Böngészése

Refactor, UI updates, Test ReactiveUI commands

Ruben 4 éve
szülő
commit
9cc20da033

+ 3 - 4
src/PicView/App.axaml.cs

@@ -2,6 +2,7 @@ using Avalonia;
 using Avalonia.Controls.ApplicationLifetimes;
 using Avalonia.Markup.Xaml;
 using PicView.Styles.Themes;
+using PicView.Styles.Themes.Dark;
 using PicView.ViewModels;
 using PicView.Views;
 
@@ -25,10 +26,8 @@ namespace PicView
         {
             if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
             {
-                desktop.MainWindow = new MainWindow
-                {
-                    DataContext = new MainWindowViewModel(),
-                };
+                var w = desktop.MainWindow = new MainWindow();
+                w.DataContext = new MainWindowViewModel(w);
             }
 
             base.OnFrameworkInitializationCompleted();

+ 1 - 1
src/PicView/PicView.csproj

@@ -28,7 +28,7 @@
 		<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
 		<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.11-rc.1" />
 		<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.11-rc.1" />
-		<PackageReference Include="Avalonia.Xaml.Behaviors" Version="0.10.10.4" />
+		<PackageReference Include="Avalonia.Xaml.Behaviors" Version="0.10.11.1-rc.1" />
 	</ItemGroup>
 	<ItemGroup>
 		<Resource Include="Resources\icon__Q6k_icon.ico" />

+ 1 - 1
src/PicView/Styles/Themes/Dark/FluentDark.axaml

@@ -1,5 +1,5 @@
 <Styles
-    x:Class="PicView.Styles.Themes.FluentDark"
+    x:Class="PicView.Styles.Themes.Dark.FluentDark"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 

+ 1 - 2
src/PicView/Styles/Themes/Dark/FluentDark.cs

@@ -1,8 +1,7 @@
-using Avalonia.Styling;
 using Avalonia.Markup.Xaml;
 using AvaloniaStyles = Avalonia.Styling.Styles;
 
-namespace PicView.Styles.Themes
+namespace PicView.Styles.Themes.Dark
 {
     internal class FluentDark : AvaloniaStyles
     {

+ 19 - 4
src/PicView/ViewModels/MainWindowViewModel.cs

@@ -1,11 +1,26 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
+using Avalonia.Controls.ApplicationLifetimes;
+using ReactiveUI;
+using System.Windows.Input;
+using Avalonia.Controls;
 
 namespace PicView.ViewModels
 {
     public class MainWindowViewModel : ViewModelBase
     {
-        public static string Title => "No image loaded";
+        private string _title = "Loading...";
+        public string Title
+        {
+            get => _title;
+            set => this.RaiseAndSetIfChanged(ref _title, value);
+        }
+
+        public ICommand ExitCommand { get; }
+        public ICommand MinimizeCommand { get; }
+        public MainWindowViewModel(Window window)
+        {
+            ExitCommand = ReactiveCommand.Create(window.Close);
+
+            MinimizeCommand = ReactiveCommand.Create(() => window.WindowState = WindowState.Minimized);
+        }
     }
 }

+ 11 - 11
src/PicView/Views/CustomTitleBars/WinTitleBar.axaml

@@ -1,6 +1,6 @@
 <UserControl
     Background="{StaticResource WindowBackgroundColor}"
-    x:Class="PicView.UserControls.WinTitleBar"
+    x:Class="PicView.Views.CustomTitleBars.WinTitleBar"
     xmlns="https://github.com/avaloniaui"
     xmlns:vm="using:PicView.ViewModels"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
@@ -62,9 +62,9 @@
 
         <Button
             Background="Transparent"
+            Command="{Binding ExitCommand}"
             DockPanel.Dock="Right"
-            Height="30"
-            Name="CloseButton">
+            Height="30">
             <Path
                 Data="M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4  L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1  c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1  c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z"
                 Fill="{StaticResource IconColor}"
@@ -103,9 +103,9 @@
 
         <Button
             Background="Transparent"
+            Command="{Binding MinimizeCommand}"
             DockPanel.Dock="Right"
-            Height="30"
-            Name="MinimizeButton">
+            Height="30">
             <Viewbox Height="12" Width="12">
                 <Path
                     Data="M24,11c0-0.6-0.4-1-1-1H1c-0.6,0-1,0.4-1,1v2c0,0.6,0.4,1,1,1h22c0.6,0,1-0.4,1-1V11z"
@@ -119,17 +119,17 @@
             Height="30"
             Width="1" />
 
-        <TextBox
-            AcceptsReturn="True"
-            AcceptsTab="False"
+        <TextBlock
             Background="{StaticResource BackgroundSubtleHighlightBrush}"
-            BorderThickness="0"
+            FontFamily="Inter"
             FontSize="12"
             FontWeight="Bold"
+            Height="30"
             IsTabStop="False"
+            Padding="0,6,0,6"
             Text="{Binding Title}"
             TextAlignment="Center"
-            VerticalAlignment="Center"
-            VerticalContentAlignment="Center" />
+            TextTrimming="CharacterEllipsis"
+            VerticalAlignment="Center" />
     </DockPanel>
 </UserControl>

+ 6 - 15
src/PicView/Views/CustomTitleBars/WinTitleBar.axaml.cs

@@ -1,36 +1,27 @@
 using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
 using Avalonia.Input;
+using Avalonia.Markup.Xaml;
 
-namespace PicView.UserControls
+namespace PicView.Views.CustomTitleBars
 {
     public partial class WinTitleBar : UserControl
     {
-        Button closeButton;
-
         public WinTitleBar()
         {
             InitializeComponent();
-            closeButton = this.FindControl<Button>("CloseButton");
-
-            closeButton.Click += (_, _) => CloseWindow();
 
             PointerPressed += (_, e) => MoveWindow(e);
         }
 
-        private void CloseWindow()
-        {
-            Window hostWindow = (Window)VisualRoot;
-            hostWindow.Close();
-        }
-
         private void MoveWindow(PointerPressedEventArgs e)
         {
+            if (VisualRoot is null) { return; }
+            
             Window hostWindow = (Window)VisualRoot;
-            hostWindow.BeginMoveDrag(e);
+            hostWindow?.BeginMoveDrag(e);
         }
 
-        void InitializeComponent()
+        private void InitializeComponent()
         {
             AvaloniaXamlLoader.Load(this);
         }

+ 2 - 7
src/PicView/Views/MainWindow.axaml

@@ -7,18 +7,13 @@
     MinHeight="400"
     MinWidth="462"
     SizeToContent="WidthAndHeight"
-    SystemDecorations="None"
     Title="{Binding Title}"
     TransparencyLevelHint="AcrylicBlur"
     UseLayoutRounding="True"
     WindowStartupLocation="CenterScreen"
-    d:DesignHeight="450"
-    d:DesignWidth="800"
-    mc:Ignorable="d"
     x:Class="PicView.Views.MainWindow"
     xmlns="https://github.com/avaloniaui"
-    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+    xmlns:customTitleBars="clr-namespace:PicView.Views.CustomTitleBars"
     xmlns:uc="using:PicView.UserControls"
     xmlns:vm="using:PicView.ViewModels"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
@@ -34,7 +29,7 @@
         CornerRadius="5"
         Padding="1">
         <DockPanel>
-            <uc:WinTitleBar DockPanel.Dock="Top" />
+            <customTitleBars:WinTitleBar DockPanel.Dock="Top" />
             <Rectangle
                 DockPanel.Dock="Top"
                 Fill="{StaticResource BorderBrush}"