break wallet navigation off into seperate view

This commit is contained in:
TheXamlGuy
2024-07-10 15:21:02 +01:00
parent 762c867eaa
commit bd51de3245
24 changed files with 298 additions and 236 deletions
+7 -5
View File
@@ -136,18 +136,18 @@ public partial class App : Application
services.AddTemplate<OpenWalletViewModel, OpenWalletView>("OpenWallet");
services.AddScoped<ItemCollectionConfiguration>();
services.AddScoped<ItemNavigationCollectionConfiguration>();
services.AddTemplate<WalletViewModel, WalletView>("Wallet");
services.AddTemplate<ItemCollectionViewModel, ItemCollectionView>("ItemCollection");
services.AddTemplate<ItemNavigationCollectionViewModel, ItemNavigationCollectionView>("ItemCollection");
services.AddHandler<ItemCollectionViewModelActivatedHandler>();
services.AddHandler<ItemNavigationCollectionViewModelActivatedHandler>();
services.AddTemplate<WalletHeaderViewModel, WalletHeaderView>("WalletHeader");
services.AddTemplate<BackActionViewModel, BackActionView>();
services.AddTemplate<SearchWalletActionViewModel, SearchWalletActionView>();
services.AddTemplate<ItemCategoryCollectionViewModel, ItemCategoryCollectionView>("ItemCategoryCollection");
services.AddTemplate<ItemCategoryNavigationCollectionViewModel, ItemCategoryNavigationCollectionView>("ItemCategoryCollection");
services.AddTemplate<ItemCategoryNavigationViewModel, ItemCategoryNavigationView>();
services.AddHandler<CategoriesNavigationViewModelActivationHandler>();
@@ -231,7 +231,9 @@ public partial class App : Application
services.AddHandler<CreateProfileImageHandler>();
services.AddTemplate<MainViewModel, MainView>("Main");
services.AddHandler<MainViewModelActivationHandler>();
services.AddHandler<WalletNavigationCollectionViewModelActivationHandler>();
services.AddTemplate<WalletNavigationCollectionViewModel, WalletNavigationCollectionView>("Wallets");
services.AddTransient<FooterViewModel>();
@@ -1,10 +0,0 @@
using Avalonia.Controls;
namespace Wallet.Avalonia;
public partial class ItemCategoryCollectionView :
UserControl
{
public ItemCategoryCollectionView() =>
InitializeComponent();
}
@@ -1,9 +1,9 @@
<UserControl
x:Class="Wallet.Avalonia.ItemCategoryCollectionView"
x:Class="Wallet.Avalonia.ItemCategoryNavigationCollectionView"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:Wallet"
x:DataType="vm:ItemCategoryCollectionViewModel">
x:DataType="vm:ItemCategoryNavigationCollectionViewModel">
<ListBox
Margin="2,-1,0,0"
AutoScrollToSelectedItem="True"
@@ -0,0 +1,10 @@
using Avalonia.Controls;
namespace Wallet.Avalonia;
public partial class ItemCategoryNavigationCollectionView :
UserControl
{
public ItemCategoryNavigationCollectionView() =>
InitializeComponent();
}
@@ -1,18 +0,0 @@
using Avalonia.Controls;
namespace Wallet.Avalonia;
public partial class ItemCollectionView :
UserControl
{
public ItemCollectionView()
{
InitializeComponent();
foo.SelectionChanged += Foo_SelectionChanged;
}
private void Foo_SelectionChanged(object? sender, SelectionChangedEventArgs e)
{
}
}
@@ -1,9 +1,9 @@
<UserControl
x:Class="Wallet.Avalonia.ItemCollectionView"
x:Class="Wallet.Avalonia.ItemNavigationCollectionView"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:Wallet"
x:DataType="vm:ItemCollectionViewModel">
x:DataType="vm:ItemNavigationCollectionViewModel">
<Interaction.Behaviors>
<AttachedBehaviour>
<ConditionAction>
@@ -0,0 +1,9 @@
using Avalonia.Controls;
namespace Wallet.Avalonia;
public partial class ItemNavigationCollectionView :
UserControl
{
public ItemNavigationCollectionView() => InitializeComponent();
}
+30 -156
View File
@@ -10,8 +10,34 @@
FooterMenuItemsSource="{Binding Footer}"
IsSettingsVisible="False"
MenuItemTemplate="{Binding Template}"
MenuItemsSource="{Binding #ListBox.SelectedItem}">
<Interaction.Behaviors>
SelectedItem="{Binding SelectedItem}">
<NavigationView.PaneCustomContent>
<Grid RowDefinitions="*,Auto">
<ContentControl Grid.Row="0">
<Interaction.Behaviors>
<AttachedBehaviour>
<NavigateAction Region="{Binding $self}" Route="Wallets" />
</AttachedBehaviour>
</Interaction.Behaviors>
</ContentControl>
<NavigationViewItemSeparator Grid.Row="1" />
</Grid>
</NavigationView.PaneCustomContent>
<NavigationView.Resources>
<CornerRadius x:Key="NavigationViewContentGridCornerRadius">0</CornerRadius>
<Thickness x:Key="NavigationViewContentGridBorderThickness">1,0,0,0</Thickness>
</NavigationView.Resources>
<Frame>
<Interaction.Behaviors>
<AttachedBehaviour>
<NavigateRegionAction Name="Main">
<NavigateAction Region="Main" Route="Wallet" />
</NavigateRegionAction>
</AttachedBehaviour>
</Interaction.Behaviors>
</Frame>
<!--<Interaction.Behaviors>
<DataTriggerBehavior Binding="{ReflectionBinding SelectedItem.IsOpened}" Value="True">
<InvokeNavigationViewItemAction SelectedIndex="1" />
</DataTriggerBehavior>
@@ -35,159 +61,7 @@
</NavigationView.PaneHeader>
<NavigationView.PaneCustomContent>
<Grid RowDefinitions="*,Auto">
<Overflow
x:Name="ListBox"
Grid.Row="0"
HorizontalAlignment="Center"
ItemTemplate="{ReflectionBinding Template}"
ItemsSource="{Binding}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
<Overflow.Resources>
<StaticResource x:Key="ListViewItemBackgroundSelected" ResourceKey="SubtleFillColorTransparentBrush" />
<x:Double x:Key="WalletItemSize">40</x:Double>
<CornerRadius x:Key="WalletItemCornerRadius">40</CornerRadius>
<ControlTheme x:Key="{x:Type ListBoxItem}" TargetType="ListBoxItem">
<Setter Property="FontFamily" Value="{DynamicResource ContentControlThemeFontFamily}" />
<Setter Property="FontSize" Value="{DynamicResource ControlContentThemeFontSize}" />
<Setter Property="Background" Value="{DynamicResource ListViewItemBackground}" />
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForeground}" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Width" Value="{StaticResource WalletItemSize}" />
<Setter Property="Height" Value="{StaticResource WalletItemSize}" />
<Setter Property="MinHeight" Value="{StaticResource WalletItemSize}" />
<Setter Property="MinWidth" Value="{StaticResource WalletItemSize}" />
<Setter Property="CornerRadius" Value="{StaticResource WalletItemCornerRadius}" />
<Setter Property="Template">
<ControlTemplate>
<Panel>
<Border
x:Name="PART_ContentBorder"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}">
<Grid>
<ContentPresenter
Name="PART_ContentPresenter"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
<Border
Name="SelectionIndicator"
BorderBrush="{DynamicResource AccentFillColorDefaultBrush}"
BorderThickness="3"
CornerRadius="{TemplateBinding CornerRadius}"
IsVisible="False"
UseLayoutRounding="False" />
</Grid>
</Border>
</Panel>
</ControlTemplate>
</Setter>
<Style Selector="^:disabled">
<Setter Property="Opacity" Value="0.5" />
</Style>
<Style Selector="^:pointerover">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundPointerOver}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundPointerOver}" />
</Style>
</Style>
<Style Selector="^:pressed">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundPressed}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundPressed}" />
</Style>
</Style>
<Style Selector="^:selected">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundSelected}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundSelected}" />
</Style>
<Style Selector="^ /template/ Border#SelectionIndicator">
<Setter Property="IsVisible" Value="True" />
</Style>
<Style Selector="^:not(:focus) /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundSelected}" />
</Style>
<Style Selector="^:not(:focus) /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundSelected}" />
</Style>
<Style Selector="^:pointerover">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundSelectedPointerOver}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundSelectedPointerOver}" />
</Style>
<Style Selector="^ /template/ Border#SelectionIndicator">
<Setter Property="BorderBrush" Value="{DynamicResource ListViewItemSelectionIndicatorPointerOverBrush}" />
</Style>
</Style>
<Style Selector="^:pressed">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundSelectedPressed}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundSelectedPressed}" />
</Style>
</Style>
<Style Selector="^:disabled /template/ Border#SelectionIndicator">
<Setter Property="BorderBrush" Value="{DynamicResource ListViewItemSelectionIndicatorDisabledBrush}" />
</Style>
</Style>
</ControlTheme>
</Overflow.Resources>
<Overflow.Styles>
<Style Selector="Overflow.Closed">
<Setter Property="Margin" Value="1,2,1,0" />
<Style Selector="^ StackPanel">
<Setter Property="Orientation" Value="Vertical" />
</Style>
</Style>
<Style Selector="Overflow.Opened">
<Setter Property="Margin" Value="12,2,12,0" />
<Style Selector="^ StackPanel">
<Setter Property="Orientation" Value="Horizontal" />
</Style>
</Style>
</Overflow.Styles>
<Overflow.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Spacing="6" />
</ItemsPanelTemplate>
</Overflow.ItemsPanel>
<Interaction.Behaviors>
<DataTriggerBehavior Binding="{Binding $parent[NavigationView].IsPaneOpen}" Value="True">
<AddClassAction ClassName="Opened" RemoveIfExists="True" />
<RemoveClassAction ClassName="Closed" />
</DataTriggerBehavior>
<DataTriggerBehavior Binding="{Binding $parent[NavigationView].IsPaneOpen}" Value="False">
<AddClassAction ClassName="Closed" RemoveIfExists="True" />
<RemoveClassAction ClassName="Opened" />
</DataTriggerBehavior>
<DataTriggerBehavior Binding="{Binding #ListBox.SelectedItem, Converter={NamedTypeConverter}}" Value="WalletNavigationViewModel">
<ChangePropertyAction
PropertyName="SelectedItem"
TargetObject="{Binding #NavigationView}"
Value="{x:Null}" />
</DataTriggerBehavior>
<DataTriggerBehavior Binding="{Binding #NavigationView.SelectedItem, Converter={NamedTypeConverter}}" Value="ManageNavigationViewModel">
<ChangePropertyAction
PropertyName="SelectedItem"
TargetObject="{Binding #ListBox}"
Value="{x:Null}" />
</DataTriggerBehavior>
</Interaction.Behaviors>
</Overflow>
<NavigationViewItemSeparator Grid.Row="1" />
</Grid>
</NavigationView.PaneCustomContent>
@@ -203,7 +77,7 @@
</NavigateRegionAction>
</AttachedBehaviour>
</Interaction.Behaviors>
</Frame>
</Frame>-->
</NavigationView>
</UserControl>
+4 -4
View File
@@ -50,11 +50,11 @@
<Compile Update="ItemCategoryNavigationView.axaml.cs">
<DependentUpon>ItemCategoryNavigationView.axaml</DependentUpon>
</Compile>
<Compile Update="ItemCategoryCollectionView.axaml.cs">
<DependentUpon>ItemCategoryCollectionView.axaml</DependentUpon>
<Compile Update="ItemCategoryNavigationCollectionView.axaml.cs">
<DependentUpon>ItemCategoryNavigationCollectionView.axaml</DependentUpon>
</Compile>
<Compile Update="ItemCollectionView.axaml.cs">
<DependentUpon>ItemCollectionView.axaml</DependentUpon>
<Compile Update="ItemNavigationCollectionView.axaml.cs">
<DependentUpon>ItemNavigationCollectionView.axaml</DependentUpon>
</Compile>
<Compile Update="CreateItemNavigationView.axaml.cs">
<DependentUpon>CreateItemNavigationView.axaml</DependentUpon>
@@ -0,0 +1,146 @@
<UserControl
x:Class="Wallet.Avalonia.WalletNavigationCollectionView"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:Wallet"
x:DataType="vm:WalletNavigationCollectionViewModel">
<Overflow
HorizontalAlignment="Center"
ItemTemplate="{ReflectionBinding Template}"
ItemsSource="{Binding}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
<Overflow.Resources>
<StaticResource x:Key="ListViewItemBackgroundSelected" ResourceKey="SubtleFillColorTransparentBrush" />
<x:Double x:Key="WalletItemSize">40</x:Double>
<CornerRadius x:Key="WalletItemCornerRadius">40</CornerRadius>
<ControlTheme x:Key="{x:Type ListBoxItem}" TargetType="ListBoxItem">
<Setter Property="FontFamily" Value="{DynamicResource ContentControlThemeFontFamily}" />
<Setter Property="FontSize" Value="{DynamicResource ControlContentThemeFontSize}" />
<Setter Property="Background" Value="{DynamicResource ListViewItemBackground}" />
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForeground}" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Width" Value="{StaticResource WalletItemSize}" />
<Setter Property="Height" Value="{StaticResource WalletItemSize}" />
<Setter Property="MinHeight" Value="{StaticResource WalletItemSize}" />
<Setter Property="MinWidth" Value="{StaticResource WalletItemSize}" />
<Setter Property="CornerRadius" Value="{StaticResource WalletItemCornerRadius}" />
<Setter Property="Template">
<ControlTemplate>
<Panel>
<Border
x:Name="PART_ContentBorder"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}">
<Grid>
<ContentPresenter
Name="PART_ContentPresenter"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
<Border
Name="SelectionIndicator"
BorderBrush="{DynamicResource AccentFillColorDefaultBrush}"
BorderThickness="3"
CornerRadius="{TemplateBinding CornerRadius}"
IsVisible="False"
UseLayoutRounding="False" />
</Grid>
</Border>
</Panel>
</ControlTemplate>
</Setter>
<Style Selector="^:disabled">
<Setter Property="Opacity" Value="0.5" />
</Style>
<Style Selector="^:pointerover">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundPointerOver}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundPointerOver}" />
</Style>
</Style>
<Style Selector="^:pressed">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundPressed}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundPressed}" />
</Style>
</Style>
<Style Selector="^:selected">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundSelected}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundSelected}" />
</Style>
<Style Selector="^ /template/ Border#SelectionIndicator">
<Setter Property="IsVisible" Value="True" />
</Style>
<Style Selector="^:not(:focus) /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundSelected}" />
</Style>
<Style Selector="^:not(:focus) /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundSelected}" />
</Style>
<Style Selector="^:pointerover">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundSelectedPointerOver}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundSelectedPointerOver}" />
</Style>
<Style Selector="^ /template/ Border#SelectionIndicator">
<Setter Property="BorderBrush" Value="{DynamicResource ListViewItemSelectionIndicatorPointerOverBrush}" />
</Style>
</Style>
<Style Selector="^:pressed">
<Style Selector="^ /template/ Border#PART_ContentBorder">
<Setter Property="Background" Value="{DynamicResource ListViewItemBackgroundSelectedPressed}" />
</Style>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Foreground" Value="{DynamicResource ListViewItemForegroundSelectedPressed}" />
</Style>
</Style>
<Style Selector="^:disabled /template/ Border#SelectionIndicator">
<Setter Property="BorderBrush" Value="{DynamicResource ListViewItemSelectionIndicatorDisabledBrush}" />
</Style>
</Style>
</ControlTheme>
</Overflow.Resources>
<Overflow.Styles>
<Style Selector="Overflow.Closed">
<Setter Property="Margin" Value="1,2,1,0" />
<Style Selector="^ StackPanel">
<Setter Property="Orientation" Value="Vertical" />
</Style>
</Style>
<Style Selector="Overflow.Opened">
<Setter Property="Margin" Value="12,2,12,0" />
<Style Selector="^ StackPanel">
<Setter Property="Orientation" Value="Horizontal" />
</Style>
</Style>
</Overflow.Styles>
<Overflow.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Spacing="6" />
</ItemsPanelTemplate>
</Overflow.ItemsPanel>
<Interaction.Behaviors>
<DataTriggerBehavior Binding="{Binding $parent[NavigationView].IsPaneOpen}" Value="True">
<AddClassAction ClassName="Opened" RemoveIfExists="True" />
<RemoveClassAction ClassName="Closed" />
</DataTriggerBehavior>
<DataTriggerBehavior Binding="{Binding $parent[NavigationView].IsPaneOpen}" Value="False">
<AddClassAction ClassName="Closed" RemoveIfExists="True" />
<RemoveClassAction ClassName="Opened" />
</DataTriggerBehavior>
</Interaction.Behaviors>
</Overflow>
</UserControl>
@@ -0,0 +1,9 @@
using Avalonia.Controls;
namespace Wallet.Avalonia;
public partial class WalletNavigationCollectionView :
UserControl
{
public WalletNavigationCollectionView() => InitializeComponent();
}