fix: support WASM.

This commit is contained in:
Zhang Dian
2023-07-19 23:03:17 +08:00
parent d1d7987847
commit 19bd4c8c79
13 changed files with 67 additions and 121 deletions

View File

@@ -1,23 +0,0 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Ursa.Demo.Views;
namespace Ursa.Demo.Android;
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is ISingleViewApplicationLifetime single)
{
single.MainView = new MainView();
}
base.OnFrameworkInitializationCompleted();
}
}

View File

@@ -1,9 +0,0 @@
<Application
x:Class="Ursa.Demo.Browser.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
<StyleInclude Source="avares://Ursa.Themes.Semi/Index.axaml" />
</Application.Styles>
</Application>

View File

@@ -1,23 +0,0 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Ursa.Demo.Views;
namespace Ursa.Demo.Browser;
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is ISingleViewApplicationLifetime single)
{
single.MainView = new MainView();
}
base.OnFrameworkInitializationCompleted();
}
}

View File

@@ -1,9 +0,0 @@
<Application
x:Class="Ursa.Demo.Desktop.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
<StyleInclude Source="avares://Ursa.Themes.Semi/Index.axaml" />
</Application.Styles>
</Application>

View File

@@ -3,7 +3,7 @@
<OutputType>WinExe</OutputType>
<!--If you are willing to use Windows/MacOS native APIs you will need to create 3 projects.
One for Windows with net7.0-windows TFM, one for MacOS with net7.0-macos and one with net7.0 TFM for Linux.-->
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
</PropertyGroup>
@@ -21,11 +21,4 @@
<ItemGroup>
<ProjectReference Include="..\Ursa.Demo\Ursa.Demo.csproj"/>
</ItemGroup>
<ItemGroup>
<Compile Update="App.axaml.cs">
<DependentUpon>App.axaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -4,7 +4,6 @@ using Avalonia;
using Avalonia.Controls;
using Avalonia.iOS;
using Avalonia.Media;
using Avalonia.ReactiveUI;
namespace Ursa.Demo.iOS;
@@ -16,8 +15,6 @@ public partial class AppDelegate : AvaloniaAppDelegate<App>
{
protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
{
return base.CustomizeAppBuilder(builder)
.WithInterFont()
.UseReactiveUI();
return base.CustomizeAppBuilder(builder);
}
}

View File

@@ -1,5 +1,5 @@
<Application
x:Class="Ursa.Demo.Android.App"
x:Class="Ursa.Demo.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Styles>

View File

@@ -4,7 +4,7 @@ using Avalonia.Markup.Xaml;
using Ursa.Demo.ViewModels;
using Ursa.Demo.Views;
namespace Ursa.Demo.Desktop;
namespace Ursa.Demo;
public partial class App : Application
{
@@ -17,11 +17,16 @@ public partial class App : Application
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
// Line below is needed to remove Avalonia data validation.
// Without this line you will get duplicate validations from both Avalonia and CT
desktop.MainWindow = new MainWindow
desktop.MainWindow = new MainWindow()
{
DataContext = new MainWindowViewModel(),
DataContext = new MainViewViewModel(),
};
}
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
{
singleView.MainView = new MainView()
{
DataContext = new MainViewViewModel(),
};
}

View File

@@ -26,4 +26,11 @@
<ProjectReference Include="..\..\src\Ursa.Themes.Semi\Ursa.Themes.Semi.csproj"/>
<ProjectReference Include="..\..\src\Ursa\Ursa.csproj"/>
</ItemGroup>
<ItemGroup>
<Compile Update="App.axaml.cs">
<DependentUpon>App.axaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,39 @@
using CommunityToolkit.Mvvm.Messaging;
namespace Ursa.Demo.ViewModels;
public class MainViewViewModel : ViewModelBase
{
public MenuViewModel Menus { get; set; } = new MenuViewModel();
private object? _content;
public object? Content
{
get => _content;
set => SetProperty(ref _content, value);
}
public MainViewViewModel()
{
WeakReferenceMessenger.Default.Register<MainViewViewModel, string>(this, OnNavigation);
}
private void OnNavigation(MainViewViewModel vm, string s)
{
Content = s switch
{
MenuKeys.MenuKeyBadge => new BadgeDemoViewModel(),
MenuKeys.MenuKeyBanner => new BannerDemoViewModel(),
MenuKeys.MenuKeyButtonGroup => new ButtonGroupDemoViewModel(),
MenuKeys.MenuKeyDivider => new DividerDemoViewModel(),
MenuKeys.MenuKeyIpBox => new IPv4BoxDemoViewModel(),
MenuKeys.MenuKeyLoading => new LoadingDemoViewModel(),
MenuKeys.MenuKeyNavigation => new NavigationMenuDemoViewModel(),
MenuKeys.MenuKeyPagination => new PaginationDemoViewModel(),
MenuKeys.MenuKeyTagInput => new TagInputDemoViewModel(),
MenuKeys.MenuKeyTimeline => new TimelineDemoViewModel(),
};
}
}

View File

@@ -1,40 +1,6 @@

using CommunityToolkit.Mvvm.Messaging;
namespace Ursa.Demo.ViewModels;
namespace Ursa.Demo.ViewModels;
public class MainWindowViewModel : ViewModelBase
{
public MenuViewModel Menus { get; set; } = new MenuViewModel();
private object? _content;
public object? Content
{
get => _content;
set => SetProperty(ref _content, value);
}
public MainWindowViewModel()
{
WeakReferenceMessenger.Default.Register<MainWindowViewModel, string>(this, OnNavigation);
}
private void OnNavigation(MainWindowViewModel vm, string s)
{
Content = s switch
{
MenuKeys.MenuKeyBadge => new BadgeDemoViewModel(),
MenuKeys.MenuKeyBanner => new BannerDemoViewModel(),
MenuKeys.MenuKeyButtonGroup => new ButtonGroupDemoViewModel(),
MenuKeys.MenuKeyDivider => new DividerDemoViewModel(),
MenuKeys.MenuKeyIpBox => new IPv4BoxDemoViewModel(),
MenuKeys.MenuKeyLoading => new LoadingDemoViewModel(),
MenuKeys.MenuKeyNavigation => new NavigationMenuDemoViewModel(),
MenuKeys.MenuKeyPagination => new PaginationDemoViewModel(),
MenuKeys.MenuKeyTagInput => new TagInputDemoViewModel(),
MenuKeys.MenuKeyTimeline => new TimelineDemoViewModel(),
};
}
public MainViewViewModel MainViewViewModel { get; set; } = new MainViewViewModel();
}

View File

@@ -10,11 +10,11 @@
d:DesignHeight="450"
d:DesignWidth="800"
x:CompileBindings="True"
x:DataType="vm:MainWindowViewModel"
x:DataType="vm:MainViewViewModel"
mc:Ignorable="d">
<Design.DataContext>
<vm:MainWindowViewModel />
<vm:MainViewViewModel />
</Design.DataContext>
<Grid ColumnDefinitions="Auto, *" RowDefinitions="Auto, *">

View File

@@ -5,10 +5,13 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:Ursa.Demo.Views"
xmlns:viewModels="clr-namespace:Ursa.Demo.ViewModels"
Title="Ursa.Demo"
d:DesignHeight="450"
d:DesignWidth="800"
x:CompileBindings="True"
x:DataType="viewModels:MainWindowViewModel"
Icon="/Assets/Ursa.ico"
mc:Ignorable="d">
<views:MainView />
</Window>
</Window>