Merge pull request #26 from maxkatz6/master
Update to Avalonia 11 with some AOT improvements
This commit is contained in:
commit
5ee6979980
20
.github/workflows/dotnet.yml
vendored
20
.github/workflows/dotnet.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
dotnet-version: 7.0.x
|
||||
- name: Publish
|
||||
run: |
|
||||
sudo chmod +x ./test.sh
|
||||
@ -25,9 +25,9 @@ jobs:
|
||||
with:
|
||||
name: Linux-Artifact
|
||||
path: |
|
||||
./src/bin/x64/Release/net6.0/linux-x64/publish/*.bin
|
||||
./src/bin/x64/Release/net6.0/linux-x64/publish/*.so
|
||||
./src/bin/x64/Release/net6.0/linux-x64/publish/*.png
|
||||
./src/bin/x64/Release/net7.0/linux-x64/publish/*.bin
|
||||
./src/bin/x64/Release/net7.0/linux-x64/publish/*.so
|
||||
./src/bin/x64/Release/net7.0/linux-x64/publish/*.png
|
||||
build-on-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
@ -35,16 +35,16 @@ jobs:
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
dotnet-version: 7.0.x
|
||||
- name: Publish
|
||||
run: ./test.cmd
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Windows-Artifact
|
||||
path: |
|
||||
.\src\bin\x64\Release\net6.0\win-x64\publish\*.exe
|
||||
.\src\bin\x64\Release\net6.0\win-x64\publish\*.dll
|
||||
.\src\bin\x64\Release\net6.0\win-x64\publish\*.png
|
||||
.\src\bin\x64\Release\net7.0\win-x64\publish\*.exe
|
||||
.\src\bin\x64\Release\net7.0\win-x64\publish\*.dll
|
||||
.\src\bin\x64\Release\net7.0\win-x64\publish\*.png
|
||||
build-on-macos:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
@ -52,12 +52,12 @@ jobs:
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
dotnet-version: 7.0.x
|
||||
- name: Publish
|
||||
run: |
|
||||
sudo chmod +x ./test.command
|
||||
./test.command
|
||||
cd ./src/bin/x64/Release/net6.0/osx-x64/publish
|
||||
cd ./src/bin/x64/Release/net7.0/osx-x64/publish
|
||||
zip -r -0 macOS-Artifact.zip *.app
|
||||
mv *.zip ../../../../../../../.
|
||||
- uses: actions/upload-artifact@v2
|
||||
|
@ -1,18 +1,10 @@
|
||||
<Application xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="AvaloniaCoreRTDemo.App">
|
||||
<NativeMenu.Menu>
|
||||
<NativeMenu>
|
||||
<NativeMenuItem Header="About" Gesture="cmd+b" IsEnabled="{Binding AboutEnabled}" Command="{Binding HelpAboutMethod}"/>
|
||||
</NativeMenu>
|
||||
</NativeMenu.Menu>
|
||||
<Application.Styles>
|
||||
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseDark.xaml"/>
|
||||
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml"/>
|
||||
<StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/>
|
||||
</Application.Styles>
|
||||
<Application.Resources>
|
||||
<FluentTheme x:Key="fluentLight" Mode="Light" />
|
||||
<FluentTheme x:Key="fluentDark" Mode="Dark" />
|
||||
<StyleInclude x:Key="fluentDataGrid" Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml" />
|
||||
<StyleInclude x:Key="simpleDataGrid" Source="avares://Avalonia.Controls.DataGrid/Themes/Simple.xaml" />
|
||||
<FluentTheme x:Key="fluentTheme" Mode="Light" />
|
||||
<SimpleTheme x:Key="simpleTheme" Mode="Light" />
|
||||
</Application.Resources>
|
||||
</Application>
|
@ -1,10 +1,11 @@
|
||||
|
||||
using System;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.Styling;
|
||||
using Avalonia.Themes.Fluent;
|
||||
|
||||
using Avalonia.Themes.Simple;
|
||||
using AvaloniaCoreRTDemo.Interfaces;
|
||||
using AvaloniaCoreRTDemo.Windows;
|
||||
|
||||
@ -12,11 +13,10 @@ namespace AvaloniaCoreRTDemo
|
||||
{
|
||||
public sealed class App : Application, IThemeSwitch
|
||||
{
|
||||
private IStyle _baseLight;
|
||||
private IStyle _baseDark;
|
||||
|
||||
private IStyle _fluentLight;
|
||||
private IStyle _fluentDark;
|
||||
private FluentTheme _fluentTheme;
|
||||
private SimpleTheme _simpleTheme;
|
||||
private IStyle _fluentDataGrid;
|
||||
private IStyle _simpleDataGrid;
|
||||
|
||||
private ApplicationTheme _currentTheme;
|
||||
|
||||
@ -31,7 +31,7 @@ namespace AvaloniaCoreRTDemo
|
||||
this.InitializeThemes();
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
desktop.MainWindow = !Utilities.IsOSX ? new MainWindow() : new MainWindowMacOS();
|
||||
desktop.MainWindow = new MainWindow();
|
||||
this.DataContext = desktop.MainWindow.DataContext;
|
||||
}
|
||||
base.OnFrameworkInitializationCompleted();
|
||||
@ -39,45 +39,63 @@ namespace AvaloniaCoreRTDemo
|
||||
|
||||
private void InitializeThemes()
|
||||
{
|
||||
this._baseDark = this.Styles[0];
|
||||
this._baseLight = this.Styles[1];
|
||||
this._fluentTheme = (FluentTheme)this.Resources["fluentTheme"]!;
|
||||
this._simpleTheme = (SimpleTheme)this.Resources["simpleTheme"]!;
|
||||
this._fluentDataGrid = (IStyle)this.Resources["fluentDataGrid"]!;
|
||||
this._simpleDataGrid = (IStyle)this.Resources["simpleDataGrid"]!;
|
||||
Styles.Add(_fluentTheme);
|
||||
Styles.Add(_fluentDataGrid);
|
||||
|
||||
this.Styles.Remove(this._baseDark);
|
||||
|
||||
this._fluentLight = (FluentTheme)this.Resources["fluentLight"]!;
|
||||
this._fluentDark = (FluentTheme)this.Resources["fluentDark"]!;
|
||||
|
||||
this._currentTheme = ApplicationTheme.DefaultLight;
|
||||
this._currentTheme = ApplicationTheme.FluentLight;
|
||||
}
|
||||
|
||||
ApplicationTheme IThemeSwitch.Current => this._currentTheme;
|
||||
|
||||
void IThemeSwitch.ChangeTheme(ApplicationTheme theme)
|
||||
{
|
||||
var themeChanged = theme switch
|
||||
{
|
||||
ApplicationTheme.SimpleLight => _currentTheme is ApplicationTheme.FluentDark or ApplicationTheme.FluentLight,
|
||||
ApplicationTheme.SimpleDark => _currentTheme is ApplicationTheme.FluentDark or ApplicationTheme.FluentLight,
|
||||
ApplicationTheme.FluentLight => _currentTheme is ApplicationTheme.SimpleLight or ApplicationTheme.SimpleDark,
|
||||
ApplicationTheme.FluentDark => _currentTheme is ApplicationTheme.SimpleLight or ApplicationTheme.SimpleDark,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(theme), theme, null)
|
||||
};
|
||||
|
||||
this._currentTheme = theme;
|
||||
switch (theme)
|
||||
{
|
||||
case ApplicationTheme.DefaultLight:
|
||||
this.Styles[0] = this._baseLight;
|
||||
this.Styles.Remove(this._baseDark);
|
||||
case ApplicationTheme.SimpleLight:
|
||||
this._simpleTheme.Mode = SimpleThemeMode.Light;
|
||||
this.Styles[0] = this._simpleTheme;
|
||||
this.Styles[1] = this._simpleDataGrid;
|
||||
break;
|
||||
case ApplicationTheme.DefaultDark:
|
||||
this.Styles[0] = this._baseDark;
|
||||
this.Styles.Remove(this._baseLight);
|
||||
case ApplicationTheme.SimpleDark:
|
||||
this._simpleTheme.Mode = SimpleThemeMode.Dark;
|
||||
this.Styles[0] = this._simpleTheme;
|
||||
this.Styles[1] = this._simpleDataGrid;
|
||||
break;
|
||||
case ApplicationTheme.FluentLight:
|
||||
this.Styles[0] = this._fluentLight;
|
||||
this.Styles.Remove(this._fluentDark);
|
||||
if (!this.Styles.Contains(this._baseLight))
|
||||
this.Styles.Add(this._baseLight);
|
||||
this._fluentTheme.Mode = FluentThemeMode.Light;
|
||||
this.Styles[0] = this._fluentTheme;
|
||||
this.Styles[1] = this._fluentDataGrid;
|
||||
break;
|
||||
case ApplicationTheme.FluentDark:
|
||||
this.Styles[0] = this._fluentDark;
|
||||
this.Styles.Remove(this._baseLight);
|
||||
if (!this.Styles.Contains(this._baseDark))
|
||||
this.Styles.Add(this._baseDark);
|
||||
this._fluentTheme.Mode = FluentThemeMode.Dark;
|
||||
this.Styles[0] = this._fluentTheme;
|
||||
this.Styles[1] = this._fluentDataGrid;
|
||||
break;
|
||||
}
|
||||
|
||||
if (themeChanged && ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
var oldWindow = desktop.MainWindow;
|
||||
var newWindow = new MainWindow();
|
||||
desktop.MainWindow = newWindow;
|
||||
newWindow.Show();
|
||||
oldWindow.Close();
|
||||
this.DataContext = desktop.MainWindow.DataContext;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -4,8 +4,8 @@ namespace AvaloniaCoreRTDemo
|
||||
{
|
||||
public enum ApplicationTheme : Byte
|
||||
{
|
||||
DefaultLight = 0,
|
||||
DefaultDark = 1,
|
||||
SimpleLight = 0,
|
||||
SimpleDark = 1,
|
||||
FluentLight = 2,
|
||||
FluentDark = 3,
|
||||
}
|
||||
|
@ -3,16 +3,15 @@
|
||||
<PropertyGroup>
|
||||
<!-- if you want to check exceptions, change this to "Exe" and start your app from the console -->
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<Platforms>x64</Platforms>
|
||||
<ApplicationIcon>Assets/app.ico</ApplicationIcon>
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
<!--https://docs.microsoft.com/en-us/dotnet/core/deploying/trimming/trimming-options-->
|
||||
<TrimmerDefaultAction>link</TrimmerDefaultAction>
|
||||
<PublishAot>true</PublishAot>
|
||||
|
||||
<IsWindows Condition="$([MSBuild]::IsOSPlatform('Windows'))">true</IsWindows>
|
||||
<IsLinux Condition="$([MSBuild]::IsOSPlatform('Linux'))">true</IsLinux>
|
||||
<IsOSX Condition="$([MSBuild]::IsOSPlatform('OSX'))">true</IsOSX>
|
||||
<DefineConstants Condition="'$(IsOSX)'=='true'">OSX</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
@ -21,40 +20,40 @@
|
||||
<IlcGenerateCompleteTypeMetadata>false</IlcGenerateCompleteTypeMetadata>
|
||||
<IlcGenerateStackTraceData>false</IlcGenerateStackTraceData>
|
||||
<IlcDisableUnhandledExceptionExperience>true</IlcDisableUnhandledExceptionExperience>
|
||||
<StripSymbols>true</StripSymbols>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Instruct NativeAOT to use this native dependency, required to build Avalonia. This library comes from the Windows SDK. -->
|
||||
<ItemGroup Condition="'$(IsWindows)'=='true'">
|
||||
<NativeLibrary Include="WindowsApp.lib" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<AvaloniaResource Include="Assets/**" />
|
||||
<EmbeddedResource Include="Images/**" />
|
||||
<None Update="avalonia.png" CopyToPublishDirectory="PreserveNewest">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="dotnet.png" CopyToPublishDirectory="PreserveNewest">
|
||||
<AvaloniaResource Include="Images/**" />
|
||||
<None Update="Assets/app.icns" CopyToPublishDirectory="PreserveNewest" Condition="$(RuntimeIdentifier.StartsWith('osx'))">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Assets/app.icns" CopyToPublishDirectory="PreserveNewest" Condition="$(RuntimeIdentifier.StartsWith('osx'))">
|
||||
<None Update="dotnet.png">
|
||||
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="avalonia.png">
|
||||
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" Version="0.10.18" />
|
||||
<PackageReference Include="Avalonia.Desktop" Version="0.10.18" />
|
||||
<PackageReference Include="Avalonia.Native" Version="0.10.18" />
|
||||
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.18" />
|
||||
<PackageReference Include="Avalonia" Version="11.0.999-cibuild0026389-beta" />
|
||||
<PackageReference Include="Avalonia.Desktop" Version="11.0.999-cibuild0026389-beta" />
|
||||
<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.0.999-cibuild0026389-beta" />
|
||||
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.999-cibuild0026389-beta" />
|
||||
<PackageReference Include="Avalonia.Themes.Simple" Version="11.0.999-cibuild0026389-beta" />
|
||||
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.999-cibuild0026389-beta" />
|
||||
<!--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.18" />
|
||||
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.999-cibuild0026389-beta" />
|
||||
<!--Condition below is needed to generate macOS App only.-->
|
||||
<PackageReference Include="Dotnet.Bundle" Version="*" Condition="$(RuntimeIdentifier.StartsWith('osx'))" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Information for Dotnet.Bundle to Generate macOS app-->
|
||||
<PropertyGroup Condition="'$(IsOSX)'=='true'">
|
||||
<PropertyGroup>
|
||||
<CFBundleName>$(AssemblyName)</CFBundleName>
|
||||
<CFBundleDisplayName>$(AssemblyName)</CFBundleDisplayName>
|
||||
<CFBundleIdentifier>com.$(username).$(AssemblyName)</CFBundleIdentifier>
|
||||
@ -69,40 +68,5 @@
|
||||
<!-- Optional -->
|
||||
<NSRequiresAquaSystemAppearance>true</NSRequiresAquaSystemAppearance>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.DotNet.ILCompiler" Version="8.0.0-*" />
|
||||
<!-- Avalonia relies heavily on reflection. Describe types reflected upon here. -->
|
||||
<RdXmlFile Include="rd.xml" />
|
||||
<RuntimeHostConfigurationOption Include="Switch.System.Reflection.Assembly.SimulatedCallingAssembly" Value="true" />
|
||||
</ItemGroup>
|
||||
|
||||
<!--App axaml-->
|
||||
<ItemGroup>
|
||||
<Compile Update="App.axaml.cs">
|
||||
<DependentUpon>App.axaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<!--Cross platform xaml-->
|
||||
<ItemGroup>
|
||||
<Compile Update="Controls/MainControl.axaml.cs">
|
||||
<DependentUpon>MainControl.axaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Windows/AboutWindow.axaml.cs">
|
||||
<DependentUpon>AboutWindow.axaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<!--No-OSX only xaml-->
|
||||
<ItemGroup Condition="'$(IsOSX)'!='true'">
|
||||
<Compile Update="Windows/MainWindow.axaml.cs">
|
||||
<DependentUpon>MainWindow.axaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<!--OSX only xaml-->
|
||||
<ItemGroup Condition="'$(IsOSX)'=='true'">
|
||||
<Compile Update="Windows/MainWindowMacOS.axaml.cs">
|
||||
<DependentUpon>MainWindowMacOS.axaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
@ -1,5 +1,8 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaCoreRTDemo.Controls.MainControl">
|
||||
<UserControl xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:viewModels="clr-namespace:AvaloniaCoreRTDemo.Controls.ViewModels"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaCoreRTDemo.Controls.MainControl"
|
||||
x:CompileBindings="True"
|
||||
x:DataType="viewModels:MainViewModel">
|
||||
<Grid ColumnDefinitions="*,*" RowDefinitions="Auto,Auto,*" Margin="32">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" TextAlignment="Center" Margin="0,6">Welcome to Avalonia UI + NativeAOT!</TextBlock>
|
||||
<Image Grid.Row="1" Grid.Column="0" Stretch="None" Source="{Binding DotNetImage}"/>
|
||||
|
@ -18,13 +18,10 @@ namespace AvaloniaCoreRTDemo.Controls.ViewModels
|
||||
|
||||
public MainViewModel()
|
||||
{
|
||||
this._dotNetImage = Utilities.GetImageFromFile(GetImageFullPath("dotnet.png"));
|
||||
this._avaloniaImage = Utilities.GetImageFromFile(GetImageFullPath("avalonia.png"));
|
||||
this._dotNetImage = Utilities.GetImageFromFile("dotnet.png");
|
||||
this._avaloniaImage = Utilities.GetImageFromFile("avalonia.png");
|
||||
}
|
||||
|
||||
private static String GetImageFullPath(String fileName)
|
||||
=> Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);
|
||||
|
||||
~MainViewModel()
|
||||
{
|
||||
this._dotNetImage.Dispose();
|
||||
|
@ -12,10 +12,6 @@ namespace AvaloniaCoreRTDemo
|
||||
// Avalonia configuration, don't remove; also used by visual designer.
|
||||
public static AppBuilder BuildAvaloniaApp()
|
||||
=> AppBuilder.Configure<App>().UsePlatformDetect()
|
||||
.UseAvaloniaNativeOSX()
|
||||
.LogToTrace();
|
||||
|
||||
private static AppBuilder UseAvaloniaNativeOSX(this AppBuilder appBuilder)
|
||||
=> Utilities.IsOSX ? appBuilder.UseAvaloniaNative() : appBuilder;
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,9 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using Avalonia;
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Platform;
|
||||
|
||||
namespace AvaloniaCoreRTDemo
|
||||
{
|
||||
@ -15,25 +14,24 @@ namespace AvaloniaCoreRTDemo
|
||||
|
||||
public static Bitmap GetImageFromResources(String fileName)
|
||||
{
|
||||
Assembly asm = Assembly.GetExecutingAssembly();
|
||||
String resourceName = asm.GetManifestResourceNames().FirstOrDefault(str => str.EndsWith(fileName));
|
||||
if (resourceName != null)
|
||||
using (Stream bitmapStream = asm.GetManifestResourceStream(resourceName))
|
||||
return new Bitmap(bitmapStream);
|
||||
else
|
||||
return default;
|
||||
var assetLoader = AvaloniaLocator.Current.GetRequiredService<IAssetLoader>();
|
||||
using var assetStream = assetLoader.Open(new Uri($"avares://AvaloniaCoreRTDemo/Images/{fileName}"));
|
||||
return new Bitmap(assetStream);
|
||||
}
|
||||
|
||||
public static Bitmap GetImageFromFile(String path)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new Bitmap(path);
|
||||
return new Bitmap(GetImageFullPath(path));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return GetImageFromResources("broken-link.png");
|
||||
}
|
||||
}
|
||||
|
||||
private static String GetImageFullPath(String fileName)
|
||||
=> Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);
|
||||
}
|
||||
}
|
||||
|
@ -1,64 +1,20 @@
|
||||
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" x:Class="AvaloniaCoreRTDemo.Windows.AboutWindow" d:DesignWidth="640" d:DesignHeight="256"
|
||||
WindowState="Normal" WindowStartupLocation="CenterOwner" MinHeight="256" MinWidth="640" Height="256" Width="640" MaxHeight="256" MaxWidth="640" Title="About" CanResize="false" ShowInTaskbar="False" Icon="avares://AvaloniaCoreRTDemo/Assets/about.ico">
|
||||
<Grid VerticalAlignment="Top" HorizontalAlignment="Left" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<Image Margin="0, 60" Grid.Row="0" Grid.Column="0" Stretch="None" Source="{Binding ComputerImage}" VerticalAlignment="Top" HorizontalAlignment="Left">
|
||||
</Image>
|
||||
<ScrollViewer Margin="0, 10" Width="500" Height="230" Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto">
|
||||
<Grid ColumnDefinitions="Auto" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto">
|
||||
<Grid Grid.Row="0" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="Number of Cores: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding NCores}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="1" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="OS: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding OS}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="2" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="OS Arch: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding OSArch}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="3" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="OS Version: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding OSVersion}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="4" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="Computer: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding ComputerName}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="5" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="User: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding UserName}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="6" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="System Path: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding SystemPath}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="7" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="Current Path: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding CurrentPath}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="8" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="Process Arch: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding ProcessArch}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="9" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="Runtime Name: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding RuntimeName}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="10" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="Runtime Path: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding RuntimePath}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="11" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="Runtime Version: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding RuntimeVersion}"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="12" Grid.Column="0" ColumnDefinitions="Auto,Auto" RowDefinitions="Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Text="Framework Version: "/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding FrameworkVersion}"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:viewModels="clr-namespace:AvaloniaCoreRTDemo.Windows.ViewModels"
|
||||
mc:Ignorable="d" x:Class="AvaloniaCoreRTDemo.Windows.AboutWindow" d:DesignWidth="640" d:DesignHeight="256"
|
||||
WindowState="Normal" WindowStartupLocation="CenterOwner" Height="256" MaxWidth="840"
|
||||
SizeToContent="Width"
|
||||
Title="About"
|
||||
CanResize="false" ShowInTaskbar="False" Icon="avares://AvaloniaCoreRTDemo/Assets/about.ico"
|
||||
x:CompileBindings="True"
|
||||
x:DataType="viewModels:AboutViewModel">
|
||||
<Grid VerticalAlignment="Top" HorizontalAlignment="Left" ColumnDefinitions="Auto,*">
|
||||
<Image Margin="0, 60" Grid.Column="0" Stretch="None" Source="{Binding ComputerImage}" VerticalAlignment="Top" HorizontalAlignment="Left">
|
||||
</Image>
|
||||
<DataGrid Grid.Column="1" Items="{Binding SystemDetails}" IsReadOnly="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Key" Binding="{Binding Key, x:DataType=viewModels:SystemDetail}" FontWeight="Bold" />
|
||||
<DataGridTextColumn Header="Value" Binding="{Binding Value, x:DataType=viewModels:SystemDetail}" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
</Window>
|
||||
|
@ -1,21 +1,34 @@
|
||||
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:controls="clr-namespace:AvaloniaCoreRTDemo.Controls" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaCoreRTDemo.Windows.MainWindow"
|
||||
Width="640" Height="480" WindowStartupLocation="CenterScreen" Title="AvaloniaCoreRTDemo" Icon="avares://AvaloniaCoreRTDemo/Assets/app.ico" MinWidth="400" MinHeight="350">
|
||||
<DockPanel>
|
||||
<Menu DockPanel.Dock="Top">
|
||||
<MenuItem Header="_File">
|
||||
<MenuItem Header="_Exit" Command="{Binding FileExitCommand}"/>
|
||||
</MenuItem>
|
||||
<MenuItem Header="_Theme">
|
||||
<MenuItem Header="Default Light" IsEnabled="{Binding DefaultLightEnabled}" Command="{Binding DefaultLightMethod}"/>
|
||||
<MenuItem Header="Default Dark" IsEnabled="{Binding DefaultDarkEnabled}" Command="{Binding DefaultDarkMethod}"/>
|
||||
<MenuItem Header="Fluent Light" IsEnabled="{Binding FluentLightEnabled}" Command="{Binding FluentLightMethod}"/>
|
||||
<MenuItem Header="Fluent Dark" IsEnabled="{Binding FluentDarkEnabled}" Command="{Binding FluentDarkMethod}"/>
|
||||
</MenuItem>
|
||||
<MenuItem Header="_Help">
|
||||
<MenuItem Header="_About" IsEnabled="{Binding AboutEnabled}" Command="{Binding HelpAboutMethod}"/>
|
||||
</MenuItem>
|
||||
</Menu>
|
||||
<controls:MainControl/>
|
||||
</DockPanel>
|
||||
</Window>
|
||||
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:controls="clr-namespace:AvaloniaCoreRTDemo.Controls"
|
||||
xmlns:viewModels1="clr-namespace:AvaloniaCoreRTDemo.Windows.ViewModels"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaCoreRTDemo.Windows.MainWindow"
|
||||
Width="640" Height="480" WindowStartupLocation="CenterScreen" Title="AvaloniaCoreRTDemo" Icon="avares://AvaloniaCoreRTDemo/Assets/app.ico" MinWidth="400" MinHeight="350"
|
||||
x:CompileBindings="True"
|
||||
x:DataType="viewModels1:MainViewModelBase">
|
||||
<DockPanel>
|
||||
<NativeMenuBar DockPanel.Dock="Top" />
|
||||
<controls:MainControl/>
|
||||
</DockPanel>
|
||||
<NativeMenu.Menu>
|
||||
<NativeMenu>
|
||||
<NativeMenuItem Header="File">
|
||||
<NativeMenuItem.Menu>
|
||||
<NativeMenu>
|
||||
<NativeMenuItem Header="Exit" Gesture="cmd+e" Command="{Binding FileExitCommand}"/>
|
||||
<NativeMenuItem Header="About" Gesture="cmd+b" IsEnabled="{Binding AboutEnabled}" Command="{Binding HelpAboutMethod}"/>
|
||||
</NativeMenu>
|
||||
</NativeMenuItem.Menu>
|
||||
</NativeMenuItem>
|
||||
<NativeMenuItem Header="Theme">
|
||||
<NativeMenuItem.Menu>
|
||||
<NativeMenu>
|
||||
<NativeMenuItem Header="Default Light" IsEnabled="{Binding DefaultLightEnabled}" Command="{Binding DefaultLightMethod}"/>
|
||||
<NativeMenuItem Header="Default Dark" IsEnabled="{Binding DefaultDarkEnabled}" Command="{Binding DefaultDarkMethod}"/>
|
||||
<NativeMenuItem Header="Fluent Light" IsEnabled="{Binding FluentLightEnabled}" Command="{Binding FluentLightMethod}"/>
|
||||
<NativeMenuItem Header="Fluent Dark" IsEnabled="{Binding FluentDarkEnabled}" Command="{Binding FluentDarkMethod}"/>
|
||||
</NativeMenu>
|
||||
</NativeMenuItem.Menu>
|
||||
</NativeMenuItem>
|
||||
</NativeMenu>
|
||||
</NativeMenu.Menu>
|
||||
</Window>
|
@ -1,26 +0,0 @@
|
||||
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:controls="clr-namespace:AvaloniaCoreRTDemo.Controls" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaCoreRTDemo.Windows.MainWindowMacOS"
|
||||
Width="640" Height="480" WindowStartupLocation="CenterScreen" Title="AvaloniaCoreRTDemo" Icon="avares://AvaloniaCoreRTDemo/Assets/app.ico" MinWidth="400" MinHeight="350">
|
||||
<controls:MainControl/>
|
||||
<NativeMenu.Menu>
|
||||
<NativeMenu>
|
||||
<NativeMenuItem Header="File">
|
||||
<NativeMenuItem.Menu>
|
||||
<NativeMenu>
|
||||
<NativeMenuItem Header="Exit" Gesture="cmd+e" Command="{Binding FileExitCommand}"/>
|
||||
</NativeMenu>
|
||||
</NativeMenuItem.Menu>
|
||||
</NativeMenuItem>
|
||||
<NativeMenuItem Header="Theme">
|
||||
<NativeMenuItem.Menu>
|
||||
<NativeMenu>
|
||||
<NativeMenuItem Header="Default Light" IsEnabled="{Binding DefaultLightEnabled}" Command="{Binding DefaultLightMethod}"/>
|
||||
<NativeMenuItem Header="Default Dark" IsEnabled="{Binding DefaultDarkEnabled}" Command="{Binding DefaultDarkMethod}"/>
|
||||
<NativeMenuItem Header="Fluent Light" IsEnabled="{Binding FluentLightEnabled}" Command="{Binding FluentLightMethod}"/>
|
||||
<NativeMenuItem Header="Fluent Dark" IsEnabled="{Binding FluentDarkEnabled}" Command="{Binding FluentDarkMethod}"/>
|
||||
</NativeMenu>
|
||||
</NativeMenuItem.Menu>
|
||||
</NativeMenuItem>
|
||||
</NativeMenu>
|
||||
</NativeMenu.Menu>
|
||||
</Window>
|
@ -1,28 +0,0 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
|
||||
using AvaloniaCoreRTDemo.Interfaces;
|
||||
using AvaloniaCoreRTDemo.Windows.ViewModels;
|
||||
|
||||
namespace AvaloniaCoreRTDemo.Windows
|
||||
{
|
||||
public partial class MainWindowMacOS : Window, IMainWindow
|
||||
{
|
||||
public MainWindowMacOS()
|
||||
{
|
||||
InitializeComponent();
|
||||
#if DEBUG
|
||||
this.AttachDevTools();
|
||||
#endif
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
this.DataContext = new MainViewModel<MainWindowMacOS>(this);
|
||||
}
|
||||
|
||||
IThemeSwitch IMainWindow.ThemeSwitch => App.Current as IThemeSwitch;
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using Avalonia.Media.Imaging;
|
||||
@ -7,25 +8,32 @@ using ReactiveUI;
|
||||
|
||||
namespace AvaloniaCoreRTDemo.Windows.ViewModels
|
||||
{
|
||||
internal record SystemDetail(string Key, string Value);
|
||||
|
||||
internal sealed class AboutViewModel : ReactiveObject
|
||||
{
|
||||
|
||||
private readonly IBitmap _computerImage;
|
||||
private readonly Boolean _darkTheme;
|
||||
|
||||
public IBitmap ComputerImage => _computerImage;
|
||||
public static String NCores => Environment.ProcessorCount.ToString();
|
||||
public static String OS => RuntimeInformation.OSDescription;
|
||||
public static String OSArch => RuntimeInformation.OSArchitecture.ToString();
|
||||
public static String OSVersion => Environment.OSVersion.ToString();
|
||||
public static String ComputerName => Environment.MachineName;
|
||||
public static String UserName => Environment.UserName;
|
||||
public static String SystemPath => Environment.SystemDirectory;
|
||||
public static String CurrentPath => Environment.CurrentDirectory;
|
||||
public static String ProcessArch => RuntimeInformation.ProcessArchitecture.ToString();
|
||||
public static String RuntimeName => RuntimeInformation.FrameworkDescription;
|
||||
public static String RuntimePath => RuntimeEnvironment.GetRuntimeDirectory();
|
||||
public static String RuntimeVersion => RuntimeEnvironment.GetSystemVersion();
|
||||
public static String FrameworkVersion => Environment.Version.ToString();
|
||||
|
||||
public IReadOnlyList<SystemDetail> SystemDetails { get; } = new[]
|
||||
{
|
||||
new SystemDetail("Number of Cores", Environment.ProcessorCount.ToString()),
|
||||
new SystemDetail("OS", RuntimeInformation.OSDescription),
|
||||
new SystemDetail("OS Arch", RuntimeInformation.OSArchitecture.ToString()),
|
||||
new SystemDetail("OS Version", Environment.OSVersion.ToString()),
|
||||
new SystemDetail("Computer", Environment.MachineName),
|
||||
new SystemDetail("User", Environment.UserName),
|
||||
new SystemDetail("System Path", Environment.SystemDirectory),
|
||||
new SystemDetail("Current Path", Environment.CurrentDirectory),
|
||||
new SystemDetail("Process Arch", RuntimeInformation.ProcessArchitecture.ToString()),
|
||||
new SystemDetail("Runtime Name", RuntimeInformation.FrameworkDescription),
|
||||
new SystemDetail("Runtime Path", RuntimeEnvironment.GetRuntimeDirectory()),
|
||||
new SystemDetail("Runtime Version", RuntimeEnvironment.GetSystemVersion()),
|
||||
new SystemDetail("Framework Version", Environment.Version.ToString()),
|
||||
};
|
||||
|
||||
private String ComputerImageName
|
||||
{
|
||||
|
@ -12,58 +12,25 @@ namespace AvaloniaCoreRTDemo.Windows.ViewModels
|
||||
{
|
||||
private readonly TWindow _window;
|
||||
|
||||
private Boolean _defaultLightEnable = true;
|
||||
private Boolean _defaultDarkEnable = true;
|
||||
private Boolean _fluentLightEnable = true;
|
||||
private Boolean _fluentDarkEnable = true;
|
||||
|
||||
public Boolean DefaultLightEnabled
|
||||
{
|
||||
get => this._defaultLightEnable;
|
||||
set => this.RaiseAndSetIfChanged(ref this._defaultLightEnable, value);
|
||||
}
|
||||
|
||||
public Boolean DefaultDarkEnabled
|
||||
{
|
||||
get => this._defaultDarkEnable;
|
||||
set => this.RaiseAndSetIfChanged(ref this._defaultDarkEnable, value);
|
||||
}
|
||||
|
||||
public Boolean FluentLightEnabled
|
||||
{
|
||||
get => this._fluentLightEnable;
|
||||
set => this.RaiseAndSetIfChanged(ref this._fluentLightEnable, value);
|
||||
}
|
||||
|
||||
public Boolean FluentDarkEnabled
|
||||
{
|
||||
get => this._fluentDarkEnable;
|
||||
set => this.RaiseAndSetIfChanged(ref this._fluentDarkEnable, value);
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Unit> FileExitCommand { get; }
|
||||
|
||||
public MainViewModel(TWindow window)
|
||||
: base(window.ThemeSwitch)
|
||||
{
|
||||
this._window = window;
|
||||
this.FileExitCommand = ReactiveCommand.Create(RunFileExit);
|
||||
this.ChangeTheme(window.ThemeSwitch.Current);
|
||||
}
|
||||
|
||||
public void DefaultLightMethod() => this.ChangeTheme(ApplicationTheme.DefaultLight);
|
||||
public void DefaultDarkMethod() => this.ChangeTheme(ApplicationTheme.DefaultDark);
|
||||
public void FluentLightMethod() => this.ChangeTheme(ApplicationTheme.FluentLight);
|
||||
public void FluentDarkMethod() => this.ChangeTheme(ApplicationTheme.FluentDark);
|
||||
|
||||
public override void HelpAboutMethod() => base.RunHelpAbout(this._window);
|
||||
|
||||
private void RunFileExit()
|
||||
=> Environment.Exit(0);
|
||||
|
||||
public override void DefaultLightMethod() => this.ChangeTheme(ApplicationTheme.SimpleLight);
|
||||
public override void DefaultDarkMethod() => this.ChangeTheme(ApplicationTheme.SimpleDark);
|
||||
public override void FluentLightMethod() => this.ChangeTheme(ApplicationTheme.FluentLight);
|
||||
public override void FluentDarkMethod() => this.ChangeTheme(ApplicationTheme.FluentDark);
|
||||
|
||||
private void ChangeTheme(ApplicationTheme theme)
|
||||
{
|
||||
this.DefaultLightEnabled = theme != ApplicationTheme.DefaultLight && theme != ApplicationTheme.FluentLight;
|
||||
this.DefaultDarkEnabled = theme != ApplicationTheme.DefaultDark && theme != ApplicationTheme.FluentDark;
|
||||
this.DefaultLightEnabled = theme != ApplicationTheme.SimpleLight;
|
||||
this.DefaultDarkEnabled = theme != ApplicationTheme.SimpleDark;
|
||||
this.FluentLightEnabled = theme != ApplicationTheme.FluentLight;
|
||||
this.FluentDarkEnabled = theme != ApplicationTheme.FluentDark;
|
||||
this._window.ThemeSwitch?.ChangeTheme(theme);
|
||||
|
@ -1,5 +1,5 @@
|
||||
using System;
|
||||
|
||||
using System.Reactive;
|
||||
using Avalonia.Controls;
|
||||
|
||||
using AvaloniaCoreRTDemo.Interfaces;
|
||||
@ -12,6 +12,10 @@ namespace AvaloniaCoreRTDemo.Windows.ViewModels
|
||||
{
|
||||
private readonly IThemeSwitch _themeSwitch;
|
||||
private Boolean _aboutEnable = true;
|
||||
private Boolean _defaultLightEnable = true;
|
||||
private Boolean _defaultDarkEnable = true;
|
||||
private Boolean _fluentLightEnable = true;
|
||||
private Boolean _fluentDarkEnable = true;
|
||||
|
||||
public Boolean AboutEnabled
|
||||
{
|
||||
@ -20,10 +24,47 @@ namespace AvaloniaCoreRTDemo.Windows.ViewModels
|
||||
}
|
||||
|
||||
public MainViewModelBase(IThemeSwitch window)
|
||||
=> this._themeSwitch = window;
|
||||
{
|
||||
this._themeSwitch = window;
|
||||
this.FileExitCommand = ReactiveCommand.Create(RunFileExit);
|
||||
}
|
||||
|
||||
public Boolean DefaultLightEnabled
|
||||
{
|
||||
get => this._defaultLightEnable;
|
||||
set => this.RaiseAndSetIfChanged(ref this._defaultLightEnable, value);
|
||||
}
|
||||
|
||||
public Boolean DefaultDarkEnabled
|
||||
{
|
||||
get => this._defaultDarkEnable;
|
||||
set => this.RaiseAndSetIfChanged(ref this._defaultDarkEnable, value);
|
||||
}
|
||||
|
||||
public Boolean FluentLightEnabled
|
||||
{
|
||||
get => this._fluentLightEnable;
|
||||
set => this.RaiseAndSetIfChanged(ref this._fluentLightEnable, value);
|
||||
}
|
||||
|
||||
public Boolean FluentDarkEnabled
|
||||
{
|
||||
get => this._fluentDarkEnable;
|
||||
set => this.RaiseAndSetIfChanged(ref this._fluentDarkEnable, value);
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Unit> FileExitCommand { get; }
|
||||
|
||||
public abstract void HelpAboutMethod();
|
||||
|
||||
public abstract void DefaultLightMethod();
|
||||
public abstract void DefaultDarkMethod();
|
||||
public abstract void FluentLightMethod();
|
||||
public abstract void FluentDarkMethod();
|
||||
|
||||
private void RunFileExit()
|
||||
=> Environment.Exit(0);
|
||||
|
||||
protected async void RunHelpAbout(Window currentWindow)
|
||||
{
|
||||
if (this.AboutEnabled)
|
||||
@ -41,7 +82,7 @@ namespace AvaloniaCoreRTDemo.Windows.ViewModels
|
||||
private static Boolean IsDarkTheme(ApplicationTheme? theme)
|
||||
=> theme switch
|
||||
{
|
||||
ApplicationTheme.DefaultDark => true,
|
||||
ApplicationTheme.SimpleDark => true,
|
||||
ApplicationTheme.FluentDark => true,
|
||||
_ => false,
|
||||
};
|
||||
|
@ -1,8 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<add key="dotnet7" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json" />
|
||||
<add key="dotnet8" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8/nuget/v3/index.json" />
|
||||
<add key="avalonia" value="https://nuget.avaloniaui.net/repository/avalonia-all/index.json" />
|
||||
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
|
48
src/rd.xml
48
src/rd.xml
@ -1,48 +0,0 @@
|
||||
<Directives>
|
||||
<Application>
|
||||
<!-- main app assembly provides types which needs to be reflected upon -->
|
||||
<Assembly Name="AvaloniaCoreRTDemo" Dynamic="Required All"></Assembly>
|
||||
|
||||
<!-- these are needed when you show images and draw text -->
|
||||
<Assembly Name="Avalonia.Animation">
|
||||
<Type Name="Avalonia.Animation.Easings.QuadraticEaseIn" Dynamic="Required All" />
|
||||
<Type Name="Avalonia.Animation.Easings.QuadraticEaseOut" Dynamic="Required All" />
|
||||
<Type Name="Avalonia.Animation.Easings.CubicEaseOut" Dynamic="Required All" />
|
||||
<Type Name="Avalonia.Animation.Easings.LinearEasing" Dynamic="Required All" />
|
||||
</Assembly>
|
||||
<Assembly Name="Avalonia.Themes.Default" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Visuals" Dynamic="Required All">
|
||||
<Type Name="Avalonia.Media.SolidColorBrush" Dynamic="Required All" />
|
||||
</Assembly>
|
||||
<Assembly Name="SkiaSharp" Dynamic="Required All"></Assembly>
|
||||
|
||||
<!-- To support Fluent themes trimming the final assembly we need to add this entry -->
|
||||
<Assembly Name="Avalonia.Themes.Fluent" Dynamic="Required All"></Assembly>
|
||||
|
||||
<!-- Not known if and when you need these:
|
||||
<Assembly Name="Avalonia.Controls" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Base" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Interactivity" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Layout" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Markup" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Markup.Xaml" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Styling" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.DesktopRuntime" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.DesignerSupport" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Diagnostics" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Dialogs" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Input" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Logging.Serilog" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.OpenGL" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Desktop" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Direct2D1" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.ReactiveUI" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Skia" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Avalonia.Win32" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="ReactiveUI" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="System.Reactive" Dynamic="Required All"></Assembly>
|
||||
<Assembly Name="Splat" Dynamic="Required All"></Assembly>
|
||||
-->
|
||||
</Application>
|
||||
</Directives>
|
12
test.command
12
test.command
@ -5,9 +5,9 @@ if [ -d "$dir" ]; then
|
||||
fi
|
||||
rm -f src/packages.lock.json
|
||||
dotnet publish -r osx-x64 -c release /p:RestoreLockedMode=true -t:BundleApp /p:TrimLink=true --self-contained
|
||||
rm -rf src/bin/x64/Release/net6.0/osx-x64/publish/Assets/
|
||||
strip src/bin/x64/Release/net6.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/AvaloniaCoreRTDemo
|
||||
rm -rf src/bin/x64/Release/net6.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/Assets/
|
||||
rm src/bin/x64/Release/net6.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/AvaloniaCoreRTDemo.runtimeconfig.json
|
||||
rm src/bin/x64/Release/net6.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/AvaloniaCoreRTDemo.pdb
|
||||
rm src/bin/x64/Release/net6.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/AvaloniaCoreRTDemo.deps.json
|
||||
rm -rf src/bin/x64/Release/net7.0/osx-x64/publish/Assets/
|
||||
strip src/bin/x64/Release/net7.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/AvaloniaCoreRTDemo
|
||||
rm -rf src/bin/x64/Release/net7.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/Assets/
|
||||
rm src/bin/x64/Release/net7.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/AvaloniaCoreRTDemo.runtimeconfig.json
|
||||
rm src/bin/x64/Release/net7.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/AvaloniaCoreRTDemo.pdb
|
||||
rm src/bin/x64/Release/net7.0/osx-x64/publish/AvaloniaCoreRTDemo.app/Contents/MacOS/AvaloniaCoreRTDemo.deps.json
|
2
test.sh
2
test.sh
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
rm -f src/packages.lock.json
|
||||
dotnet publish -r linux-x64 -c release /p:RestoreLockedMode=true /p:TrimLink=true --self-contained
|
||||
cd src/bin/x64/Release/net6.0/linux-x64/publish
|
||||
cd src/bin/x64/Release/net7.0/linux-x64/publish
|
||||
cp AvaloniaCoreRTDemo AvaloniaCoreRTDemo.bin
|
||||
strip AvaloniaCoreRTDemo.bin
|
||||
|
Loading…
x
Reference in New Issue
Block a user