Skip to content

Commit 9de541c

Browse files
Merge pull request #140 from CodebreakerApp/139-avalonia-scrollviewer
139 avalonia scrollviewer
2 parents 8b6bae7 + 95db06e commit 9de541c

10 files changed

Lines changed: 60 additions & 44 deletions

File tree

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia.Android/CodeBreaker.Avalonia.Android.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
</ItemGroup>
1919

2020
<ItemGroup>
21-
<PackageReference Include="Avalonia.Android" Version="$(AvaloniaVersion)" />
22-
<PackageReference Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.0.1.1" />
21+
<PackageReference Include="Avalonia.Android" Version="11.0.9" />
22+
<PackageReference Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.0.1.5" />
2323
</ItemGroup>
2424

2525
<ItemGroup>

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia.Browser/CodeBreaker.Avalonia.Browser.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</ItemGroup>
1212

1313
<ItemGroup>
14-
<PackageReference Include="Avalonia.Browser" Version="$(AvaloniaVersion)" />
14+
<PackageReference Include="Avalonia.Browser" Version="11.0.9" />
1515
</ItemGroup>
1616

1717
<ItemGroup>

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia.Desktop/CodeBreaker.Avalonia.Desktop.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
</PropertyGroup>
1414

1515
<ItemGroup>
16-
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)" />
16+
<PackageReference Include="Avalonia.Desktop" Version="11.0.9" />
1717
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
18-
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" />
18+
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.9" />
1919
</ItemGroup>
2020

2121
<ItemGroup>

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia.iOS/CodeBreaker.Avalonia.iOS.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Avalonia.iOS" Version="$(AvaloniaVersion)" />
10+
<PackageReference Include="Avalonia.iOS" Version="11.0.9" />
1111
</ItemGroup>
1212

1313
<ItemGroup>

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia/App.axaml.cs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using Codebreaker.ViewModels;
66
using Codebreaker.ViewModels.Contracts.Services;
77
using Codebreaker.ViewModels.Services;
8-
using CodeBreaker.Avalonia.Contracts.Services.Navigation;
98
using CodeBreaker.Avalonia.Services;
109
using CodeBreaker.Avalonia.Services.Navigation;
1110
using CodeBreaker.Avalonia.Views;
@@ -18,12 +17,9 @@
1817
namespace CodeBreaker.Avalonia;
1918
public partial class App : Application
2019
{
21-
private readonly IHost _host;
22-
2320
public App()
2421
{
2522
this.SetDotnetEnvironmentVariable();
26-
2723
var builder = Host.CreateApplicationBuilder(Environment.GetCommandLineArgs());
2824

2925
// Configuration
@@ -42,22 +38,20 @@ public App()
4238
{
4339
client.BaseAddress = new(builder.Configuration.GetRequired("ApiBase"));
4440
});
45-
_host = builder.Build();
46-
DefaultScope = _host!.Services.CreateScope();
41+
var host = builder.Build();
42+
DefaultScope = host.Services.CreateScope();
4743
}
4844

49-
internal new static App Current => (App)Application.Current!;
45+
internal IServiceScope DefaultScope { get; private set; }
5046

51-
internal IServiceScope? DefaultScope { get; private set; }
47+
internal new static App Current => (App)Application.Current!;
5248

5349
public T GetService<T>()
5450
where T : class =>
55-
DefaultScope!.ServiceProvider.GetRequiredService<T>();
51+
DefaultScope.ServiceProvider.GetRequiredService<T>();
5652

57-
public override void Initialize()
58-
{
53+
public override void Initialize() =>
5954
AvaloniaXamlLoader.Load(this);
60-
}
6155

6256
public override void OnFrameworkInitializationCompleted()
6357
{

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia/CodeBreaker.Avalonia.csproj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,24 @@
1111
</ItemGroup>
1212

1313
<ItemGroup>
14-
<Content Include="appsettings.Development.json">
14+
<AvaloniaResource Include="appsettings.Development.json">
1515
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
16-
</Content>
17-
<Content Include="appsettings.json">
16+
</AvaloniaResource>
17+
<AvaloniaResource Include="appsettings.json">
1818
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
19-
</Content>
20-
<Content Include="appsettings.Production.json">
19+
</AvaloniaResource>
20+
<AvaloniaResource Include="appsettings.Production.json">
2121
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
22-
</Content>
22+
</AvaloniaResource>
2323
</ItemGroup>
2424

2525
<ItemGroup>
2626
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)" />
27-
<PackageReference Include="Avalonia" Version="11.0.7" />
28-
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.7" />
29-
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.7" />
27+
<PackageReference Include="Avalonia" Version="11.0.9" />
28+
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.9" />
29+
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.9" />
3030
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
31-
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.7" />
31+
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.9" />
3232
<PackageReference Include="Avalonia_Gif" Version="1.0.0" />
3333
<PackageReference Include="CNInnovation.Codebreaker.ViewModels" Version="3.5.0-beta.33" />
3434
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia/Extensions/ConfigurationExtensions.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using CodeBreaker.Avalonia;
1+
using Avalonia.Platform;
2+
using CodeBreaker.Avalonia;
23
using System;
34

45
namespace Microsoft.Extensions.Configuration;
@@ -19,7 +20,8 @@ public static string GetRequired(this IConfiguration configuration, string key)
1920

2021
public static void AddAppSettingsJson(this ConfigurationManager configuration)
2122
{
22-
configuration.AddJsonFile("appsettings.json", true);
23-
configuration.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT")}.json");
23+
var assemblyName = typeof(App).Assembly.GetName().Name;
24+
configuration.AddJsonStream(AssetLoader.Open(new($"avares://{assemblyName}/appsettings.json")));
25+
configuration.AddJsonStream(AssetLoader.Open(new($"avares://{assemblyName}/appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT")}.json")));
2426
}
2527
}

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia/Views/Pages/GamePage.axaml

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,21 @@
3434
Grid.Row="0"
3535
IsVisible="{Binding GameStatus, Mode=OneWay, Converter={StaticResource GameStatusToBooleanConverter}, ConverterParameter=Cancelable}"
3636
Margin="55,0,0,15" />
37-
<ItemsControl
38-
IsVisible="{Binding GameStatus, Mode=OneWay, ConverterParameter=Running}"
37+
<ScrollViewer
38+
x:Name="pegScrollViewer"
39+
Padding="0,0,0,15"
3940
Grid.Row="1"
40-
ItemsSource="{Binding GameMoves, Mode=OneWay}"
41-
ItemTemplate="{StaticResource PegsTemplate}">
42-
<ItemsControl.ItemsPanel>
43-
<ItemsPanelTemplate>
44-
<StackPanel Orientation="Vertical" Spacing="15" />
45-
</ItemsPanelTemplate>
46-
</ItemsControl.ItemsPanel>
47-
</ItemsControl>
41+
IsVisible="{Binding GameStatus, Mode=OneWay, ConverterParameter=Running}">
42+
<ItemsControl
43+
ItemsSource="{Binding GameMoves, Mode=OneWay}"
44+
ItemTemplate="{StaticResource PegsTemplate}">
45+
<ItemsControl.ItemsPanel>
46+
<ItemsPanelTemplate>
47+
<StackPanel Orientation="Vertical" Spacing="15" />
48+
</ItemsPanelTemplate>
49+
</ItemsControl.ItemsPanel>
50+
</ItemsControl>
51+
</ScrollViewer>
4852
<Button Grid.Row="2" Content="To TestPage" Click="ToTestPageButtonClicked" />
4953
</Grid>
5054
</UserControl>

src/CodeBreaker.Avalonia/CodeBreaker.Avalonia/Views/Pages/GamePage.axaml.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,38 @@
22
using Avalonia.Interactivity;
33
using Codebreaker.ViewModels;
44
using Codebreaker.ViewModels.Contracts.Services;
5+
using CommunityToolkit.Mvvm.Messaging;
56

67
namespace CodeBreaker.Avalonia.Views.Pages;
78

8-
public partial class GamePage : UserControl
9+
public partial class GamePage : UserControl, IRecipient<GameMoveMessage>
910
{
1011
private readonly INavigationService _navigationService;
1112

1213
public GamePage()
1314
{
1415
DataContext = App.Current.GetService<GamePageViewModel>();
15-
InitializeComponent();
1616
_navigationService = App.Current.GetService<INavigationService>();
17+
InitializeComponent();
18+
WeakReferenceMessenger.Default.Register(this);
19+
}
20+
21+
protected override void OnUnloaded(RoutedEventArgs e)
22+
{
23+
WeakReferenceMessenger.Default.UnregisterAll(this);
1724
}
1825

1926
public GamePageViewModel ViewModel => (GamePageViewModel)DataContext!;
2027

28+
public void Receive(GameMoveMessage message)
29+
{
30+
if (message.GameMoveValue is not GameMoveValue.Completed)
31+
return;
32+
33+
pegScrollViewer.UpdateLayout();
34+
pegScrollViewer.ScrollToEnd();
35+
}
36+
2137
private void ToTestPageButtonClicked(object? sender, RoutedEventArgs e)
2238
{
2339
_navigationService.NavigateToAsync("TestPage");
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
33
<Nullable>enable</Nullable>
4-
<AvaloniaVersion>11.0.7</AvaloniaVersion>
4+
<AvaloniaVersion>11.0.9</AvaloniaVersion>
55
</PropertyGroup>
66
</Project>

0 commit comments

Comments
 (0)