Skip to content

Commit bc78bd3

Browse files
committed
Added VisualStateManager to GamePage
1 parent 4777e6b commit bc78bd3

2 files changed

Lines changed: 48 additions & 8 deletions

File tree

src/Codebreaker.WinUI/Views/Pages/GamePage.xaml

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,31 @@
2020
</Style>
2121
</Page.Resources>
2222
<Grid x:Name="ContentArea">
23+
<VisualStateManager.VisualStateGroups>
24+
<VisualStateGroup>
25+
<VisualState x:Name="Start">
26+
<VisualState.Setters>
27+
<Setter Target="StartGameArea.Visibility" Value="Visible" />
28+
<Setter Target="PegSelectionArea.Visibility" Value="Collapsed" />
29+
<Setter Target="PegScrollViewer.Visibility" Value="Collapsed" />
30+
</VisualState.Setters>
31+
</VisualState>
32+
<VisualState x:Name="Playing">
33+
<VisualState.Setters>
34+
<Setter Target="StartGameArea.Visibility" Value="Collapsed" />
35+
<Setter Target="PegSelectionArea.Visibility" Value="Visible" />
36+
<Setter Target="PegScrollViewer.Visibility" Value="Visible" />
37+
</VisualState.Setters>
38+
</VisualState>
39+
<VisualState x:Name="Finished">
40+
<VisualState.Setters>
41+
<Setter Target="StartGameArea.Visibility" Value="Collapsed" />
42+
<Setter Target="PegSelectionArea.Visibility" Value="Collapsed" />
43+
<Setter Target="PegScrollViewer.Visibility" Value="Visible" />
44+
</VisualState.Setters>
45+
</VisualState>
46+
</VisualStateGroup>
47+
</VisualStateManager.VisualStateGroups>
2348
<Grid.RowDefinitions>
2449
<RowDefinition Height="auto" />
2550
<RowDefinition Height="auto" />
@@ -30,9 +55,9 @@
3055
ViewModel="{x:Bind ViewModel, Mode=OneTime}" />
3156
<!--Startgame section-->
3257
<Grid
58+
x:Name="StartGameArea"
3359
Grid.Row="0"
34-
ColumnSpacing="25"
35-
Visibility="{x:Bind ViewModel.GameStatus, Mode=OneWay, Converter={StaticResource GameStatusVisibility}, ConverterParameter=Start}">
60+
ColumnSpacing="25">
3661
<Grid.ColumnDefinitions>
3762
<ColumnDefinition />
3863
<ColumnDefinition Width="Auto" />
@@ -69,9 +94,9 @@
6994
<components:GameResultDisplay Grid.Row="0" />
7095
<!--Gamebar section-->
7196
<StackPanel
97+
x:Name="PegSelectionArea"
7298
Orientation="Horizontal"
73-
Grid.Row="1"
74-
Visibility="{x:Bind ViewModel.GameStatus, Mode=OneWay, Converter={StaticResource GameStatusVisibility}, ConverterParameter=Cancelable}">
99+
Grid.Row="1">
75100
<!--
76101
Cancelling the game is not yet implemented in the VM
77102
<Button
@@ -94,13 +119,12 @@
94119
ViewModel="{x:Bind ViewModel, Mode=OneWay}" />
95120
</StackPanel>
96121
<!--Move section-->
97-
<ScrollViewer Grid.Row="2" Padding="0,0,0,15" x:Name="pegScrollViewer">
122+
<ScrollViewer Grid.Row="2" Padding="0,0,0,15" x:Name="PegScrollViewer">
98123
<ListBox
99124
x:Name="listGameMoves"
100125
Background="Transparent"
101126
SelectedIndex="-1"
102127
IsHitTestVisible="False"
103-
Visibility="{x:Bind ViewModel.GameStatus, Mode=OneWay, Converter={StaticResource GameStatusVisibility}, ConverterParameter=Running}"
104128
ItemsSource="{x:Bind ViewModel.GameMoves, Mode=OneWay}"
105129
ItemTemplate="{StaticResource PegsTemplate}" />
106130
</ScrollViewer>

src/Codebreaker.WinUI/Views/Pages/GamePage.xaml.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,22 @@ public GamePage()
1818
InitializeComponent();
1919
WeakReferenceMessenger.Default.Register(this);
2020
WeakReferenceMessenger.Default.UnregisterAllOnUnloaded(this);
21+
ViewModel.PropertyChanged += ViewModel_PropertyChanged;
22+
VisualStateManager.GoToState(this, "Start", false);
23+
}
24+
25+
private void ViewModel_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
26+
{
27+
if (e.PropertyName != nameof(GamePageViewModel.GameStatus))
28+
return;
29+
30+
var stateName = ViewModel.GameStatus switch
31+
{
32+
GameMode.Started or GameMode.MoveSet => "Playing",
33+
GameMode.Won or GameMode.Lost => "Finished",
34+
_ => "Start",
35+
};
36+
VisualStateManager.GoToState(this, stateName, true);
2137
}
2238

2339
public void Receive(GameMoveMessage message)
@@ -43,7 +59,7 @@ public void Receive(GameMoveMessage message)
4359
});
4460

4561
// Scroll to bottom
46-
pegScrollViewer.UpdateLayout();
47-
pegScrollViewer.ScrollToVerticalOffset(pegScrollViewer.ScrollableHeight);
62+
PegScrollViewer.UpdateLayout();
63+
PegScrollViewer.ScrollToVerticalOffset(PegScrollViewer.ScrollableHeight);
4864
}
4965
}

0 commit comments

Comments
 (0)