diff --git a/src/RoyalApps.Community.Avalonia.Common/RoyalApps.Community.Avalonia.Common.csproj b/src/RoyalApps.Community.Avalonia.Common/RoyalApps.Community.Avalonia.Common.csproj index f58a049..74d155a 100644 --- a/src/RoyalApps.Community.Avalonia.Common/RoyalApps.Community.Avalonia.Common.csproj +++ b/src/RoyalApps.Community.Avalonia.Common/RoyalApps.Community.Avalonia.Common.csproj @@ -1,14 +1,14 @@ - net7.0 + net8.0 latest enable RoyalApps.Community.Avalonia.Common - + diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo.WinForms/InteropDemo.WinForms.csproj b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo.WinForms/InteropDemo.WinForms.csproj index e175340..3d5a5ed 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo.WinForms/InteropDemo.WinForms.csproj +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo.WinForms/InteropDemo.WinForms.csproj @@ -1,8 +1,8 @@ - net7.0-windows - win10-x64;win10-arm64 + net8.0-windows + win-x64;win-arm64 x64;ARM64 Debug;Release true diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/App.axaml b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/App.axaml index dce1c1a..09d3a77 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/App.axaml +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/App.axaml @@ -3,5 +3,10 @@ x:Class="InteropDemo.App"> + + + diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/App.axaml.cs b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/App.axaml.cs index 0dc5cc5..f4b46a3 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/App.axaml.cs +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/App.axaml.cs @@ -8,7 +8,7 @@ namespace InteropDemo; public class App : Application { public static MainViewModel MainViewModel; - + static App() { MainViewModel = new MainViewModel(); diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/InteropDemo.csproj b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/InteropDemo.csproj index ad9820c..912af9f 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/InteropDemo.csproj +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/InteropDemo.csproj @@ -2,8 +2,8 @@ WinExe - net7.0-windows - win10-x64;win10-arm64 + net8.0-windows + win-x64;win-arm64 x64;ARM64 Debug;Release true @@ -25,14 +25,14 @@ - - - + + + - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainView.axaml b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainView.axaml index aed6688..d11f1de 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainView.axaml +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainView.axaml @@ -7,16 +7,21 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="InteropDemo.MainView" x:CompileBindings="True" - x:DataType="viewModels:MainViewModel" - > + x:DataType="viewModels:MainViewModel"> - - - - - - - + + + + + + + + + + + + + diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainWindow.axaml b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainWindow.axaml index 899c276..05e531d 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainWindow.axaml +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainWindow.axaml @@ -3,27 +3,33 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:interopDemo="clr-namespace:InteropDemo" + xmlns:windows="clr-namespace:RoyalApps.Community.Avalonia.Windows;assembly=RoyalApps.Community.Avalonia.Windows" + xmlns:viewModels="clr-namespace:InteropDemo.ViewModels" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" UseLayoutRounding="True" RenderOptions.BitmapInterpolationMode="HighQuality" - x:Class="InteropDemo.MainWindow" - TransparencyLevelHint="AcrylicBlur" Title="Interop Demo" - ExtendClientAreaToDecorationsHint="False" - ExtendClientAreaChromeHints="PreferSystemChrome"> - - - - - - - - - - - - + TransparencyLevelHint="{Binding Transparency}" + ExtendClientAreaToDecorationsHint="True" + ExtendClientAreaChromeHints="PreferSystemChrome" + x:Class="InteropDemo.MainWindow" + x:DataType="viewModels:MainViewModel"> + + + + + + + + + + + + + + + + + + + diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainWindow.axaml.cs b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainWindow.axaml.cs index 5e1ecfa..83b87c0 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainWindow.axaml.cs +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/MainWindow.axaml.cs @@ -1,4 +1,5 @@ using Avalonia.Controls; +using Avalonia.Markup.Xaml; namespace InteropDemo; @@ -6,6 +7,6 @@ public partial class MainWindow : Window { public MainWindow() { - InitializeComponent(); + AvaloniaXamlLoader.Load(this); } } \ No newline at end of file diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/Program.cs b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/Program.cs index 6e6d611..6217493 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/Program.cs +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/Program.cs @@ -18,7 +18,8 @@ public static AppBuilder BuildAvaloniaApp() .UsePlatformDetect() .With(new Win32PlatformOptions { - CompositionMode = new [] {Win32CompositionMode.WinUIComposition, Win32CompositionMode.LowLatencyDxgiSwapChain, Win32CompositionMode.RedirectionSurface}, + OverlayPopups = true, + //CompositionMode = new [] {Win32CompositionMode.RedirectionSurface}, }) .LogToTrace(); } \ No newline at end of file diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/ViewModels/MainViewModel.cs b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/ViewModels/MainViewModel.cs index 16ced9d..d3bdd85 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/ViewModels/MainViewModel.cs +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/ViewModels/MainViewModel.cs @@ -1,4 +1,9 @@ -using System.Collections.ObjectModel; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Styling; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; @@ -8,18 +13,21 @@ public partial class MainViewModel : ViewModelBase { private int _counter = 1; [ObservableProperty] private TabViewModel? _selectedTab; + [ObservableProperty] private IReadOnlyList _transparency = [WindowTransparencyLevel.Mica, WindowTransparencyLevel.Transparent + ]; public ObservableCollection Tabs { get; set; } = new(); - [RelayCommand] public void Add() => AddTab(new TestViewModel()); - [RelayCommand] public void Remove() => RemoveTab(SelectedTab); - private void AddTab(TabViewModel tab) + [RelayCommand] + private void AddTab(TabViewModel? tab) { + tab ??= new TestViewModel(); tab.Caption += $" {_counter++}"; Tabs.Add(tab); SelectedTab = tab; } - public void RemoveTab(TabViewModel? tab) + [RelayCommand] + private void RemoveTab(TabViewModel? tab) { if (tab is null) return; @@ -27,4 +35,23 @@ public void RemoveTab(TabViewModel? tab) tab.RaiseTabClosing(); Tabs.Remove(tab); } + + [RelayCommand] + private void ToggleTheme() + { + if (Application.Current is null) + return; + + Application.Current.RequestedThemeVariant = Application.Current.ActualThemeVariant == ThemeVariant.Light + ? ThemeVariant.Dark + : ThemeVariant.Light; + } + + [RelayCommand] + private void ToggleMica() + { + Transparency = Transparency.Contains(WindowTransparencyLevel.Mica) + ? [] + : new[] { WindowTransparencyLevel.Mica }; + } } \ No newline at end of file diff --git a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/ViewModels/TabViewModel.cs b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/ViewModels/TabViewModel.cs index aab5cff..8e0f8b1 100644 --- a/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/ViewModels/TabViewModel.cs +++ b/src/RoyalApps.Community.Avalonia.InteropDemo/InteropDemo/ViewModels/TabViewModel.cs @@ -11,7 +11,7 @@ public partial class TabViewModel : ViewModelBase, IDisposeWinFormsControl public event EventHandler? DisposeWinFormsControl; - [RelayCommand] public void Close() => App.MainViewModel.RemoveTab(this); + [RelayCommand] public void Close() => App.MainViewModel.RemoveTabCommand.Execute(this); public void RaiseTabClosing() { diff --git a/src/RoyalApps.Community.Avalonia.Windows/RoyalApps.Community.Avalonia.Windows.csproj b/src/RoyalApps.Community.Avalonia.Windows/RoyalApps.Community.Avalonia.Windows.csproj index dbe16d9..3f83fa2 100644 --- a/src/RoyalApps.Community.Avalonia.Windows/RoyalApps.Community.Avalonia.Windows.csproj +++ b/src/RoyalApps.Community.Avalonia.Windows/RoyalApps.Community.Avalonia.Windows.csproj @@ -12,12 +12,12 @@ RoyalApps_1024.png MIT RoyalApps.Community.Avalonia.Windows - 1.0.3 + 1.1.0-beta1 - net7.0-windows - win10-x64;win10-arm64 + net8.0-windows + win-x64;win-arm64 Debug;Release x64;ARM64 true @@ -29,8 +29,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive