UI
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:ui="using:FluentAvalonia.UI.Controls"
|
xmlns:ui="using:FluentAvalonia.UI.Controls"
|
||||||
RequestedThemeVariant="Default">
|
RequestedThemeVariant="Dark">
|
||||||
<Application.Styles>
|
<Application.Styles>
|
||||||
<ThemeResources />
|
<ThemeResources />
|
||||||
<Style Selector="ui|SettingsExpanderItem">
|
<Style Selector="ui|SettingsExpanderItem">
|
||||||
|
|||||||
@@ -7,12 +7,17 @@ using Microsoft.Extensions.Hosting;
|
|||||||
using Toolkit.Avalonia;
|
using Toolkit.Avalonia;
|
||||||
using Toolkit.Foundation;
|
using Toolkit.Foundation;
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
using HotAvalonia;
|
||||||
|
|
||||||
namespace Bitvault.Avalonia;
|
namespace Bitvault.Avalonia;
|
||||||
|
|
||||||
public partial class App : Application
|
public partial class App : Application
|
||||||
{
|
{
|
||||||
public override void Initialize() => AvaloniaXamlLoader.Load(this);
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
this.EnableHotReload();
|
||||||
|
AvaloniaXamlLoader.Load(this);
|
||||||
|
}
|
||||||
|
|
||||||
public override async void OnFrameworkInitializationCompleted()
|
public override async void OnFrameworkInitializationCompleted()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,8 +8,13 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AvaloniaResource Include="Assets\**" />
|
<AvaloniaResource Include="Assets\**" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
|
||||||
|
<DefineConstants>$(DefineConstants);ENABLE_XAML_HOT_RELOAD</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia" Version="11.1.0-beta1" />
|
<PackageReference Condition="$(DefineConstants.Contains(ENABLE_XAML_HOT_RELOAD))" Include="Avalonia.Markup.Xaml.Loader" Version="11.1.0-beta1" />
|
||||||
|
<PackageReference Condition="$(DefineConstants.Contains(ENABLE_XAML_HOT_RELOAD))" Include="HotAvalonia" Version="1.1.0" />
|
||||||
|
<PackageReference Include="HotAvalonia.Extensions" Version="1.1.0" PrivateAssets="All" />
|
||||||
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.1.0-beta1" />
|
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.1.0-beta1" />
|
||||||
<PackageReference Include="Avalonia.Labs.Controls" Version="11.0.10.1" />
|
<PackageReference Include="Avalonia.Labs.Controls" Version="11.0.10.1" />
|
||||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
TransparencyLevelHint="Mica">
|
TransparencyLevelHint="Mica">
|
||||||
<ContentControl x:Name="Window">
|
<ContentControl x:Name="Window">
|
||||||
<Interaction.Behaviors>
|
<Interaction.Behaviors>
|
||||||
<AttachedBehavior>
|
<AttachedBehaviour>
|
||||||
<NavigateAction Context="Window" Route="Main" />
|
<NavigateAction Context="Window" Route="Main" />
|
||||||
</AttachedBehavior>
|
</AttachedBehaviour>
|
||||||
</Interaction.Behaviors>
|
</Interaction.Behaviors>
|
||||||
</ContentControl>
|
</ContentControl>
|
||||||
</windowing:AppWindow>
|
</windowing:AppWindow>
|
||||||
|
|||||||
@@ -11,9 +11,9 @@
|
|||||||
PasswordChar="●"
|
PasswordChar="●"
|
||||||
Text="{Binding Password}">
|
Text="{Binding Password}">
|
||||||
<Interaction.Behaviors>
|
<Interaction.Behaviors>
|
||||||
<KeyBindingTriggerBehavior Gesture="Enter">
|
<KeyBindingTriggerBehaviour Gesture="Enter">
|
||||||
<InvokeCommandAction Command="{Binding InvokeCommand}" />
|
<InvokeCommandAction Command="{Binding InvokeCommand}" />
|
||||||
</KeyBindingTriggerBehavior>
|
</KeyBindingTriggerBehaviour>
|
||||||
</Interaction.Behaviors>
|
</Interaction.Behaviors>
|
||||||
</TextBox>
|
</TextBox>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|||||||
@@ -8,7 +8,8 @@
|
|||||||
Content="{Binding Name}"
|
Content="{Binding Name}"
|
||||||
IsExpanded="{Binding Expanded, Mode=TwoWay}"
|
IsExpanded="{Binding Expanded, Mode=TwoWay}"
|
||||||
IsSelected="{Binding Selected}"
|
IsSelected="{Binding Selected}"
|
||||||
MenuItemsSource="{Binding}">
|
MenuItemsSource="{Binding}"
|
||||||
|
SelectsOnInvoked="True">
|
||||||
<Interaction.Behaviors>
|
<Interaction.Behaviors>
|
||||||
<DataTriggerBehavior Binding="{Binding Opened}" Value="False">
|
<DataTriggerBehavior Binding="{Binding Opened}" Value="False">
|
||||||
<ConditionAction>
|
<ConditionAction>
|
||||||
@@ -18,6 +19,10 @@
|
|||||||
</ConditionalExpression>
|
</ConditionalExpression>
|
||||||
</ConditionAction.Condition>
|
</ConditionAction.Condition>
|
||||||
<NavigateAction Context="Main" Route="OpenVault" />
|
<NavigateAction Context="Main" Route="OpenVault" />
|
||||||
|
<ChangePropertyAction
|
||||||
|
PropertyName="SelectsOnInvoked"
|
||||||
|
TargetObject="{Binding #NavigationViewItem}"
|
||||||
|
Value="True" />
|
||||||
</ConditionAction>
|
</ConditionAction>
|
||||||
</DataTriggerBehavior>
|
</DataTriggerBehavior>
|
||||||
<DataTriggerBehavior Binding="{Binding Opened}" Value="True">
|
<DataTriggerBehavior Binding="{Binding Opened}" Value="True">
|
||||||
@@ -28,14 +33,18 @@
|
|||||||
</ConditionalExpression>
|
</ConditionalExpression>
|
||||||
</ConditionAction.Condition>
|
</ConditionAction.Condition>
|
||||||
<NavigateAction Context="Main" Route="Vault" />
|
<NavigateAction Context="Main" Route="Vault" />
|
||||||
|
<ChangePropertyAction
|
||||||
|
PropertyName="SelectsOnInvoked"
|
||||||
|
TargetObject="{Binding #NavigationViewItem}"
|
||||||
|
Value="False" />
|
||||||
|
<SelectNavigationViewItemAction />
|
||||||
</ConditionAction>
|
</ConditionAction>
|
||||||
</DataTriggerBehavior>
|
</DataTriggerBehavior>
|
||||||
<DataTriggerBehavior Binding="{Binding Selected}" Value="True">
|
<NavigationViewItemInvokedBehaviour SelectsChildOnInvoked="True">
|
||||||
<ConditionAction>
|
<ConditionAction>
|
||||||
<ConditionAction.Condition>
|
<ConditionAction.Condition>
|
||||||
<ConditionalExpression ForwardChaining="And">
|
<ConditionalExpression ForwardChaining="And">
|
||||||
<ComparisonCondition LeftOperand="{Binding Opened}" RightOperand="False" />
|
<ComparisonCondition LeftOperand="{Binding Opened}" RightOperand="False" />
|
||||||
<ComparisonCondition LeftOperand="{Binding Selected}" RightOperand="False" />
|
|
||||||
<ComparisonCondition LeftOperand="{Binding #NavigationViewItem.IsChildSelected}" RightOperand="False" />
|
<ComparisonCondition LeftOperand="{Binding #NavigationViewItem.IsChildSelected}" RightOperand="False" />
|
||||||
</ConditionalExpression>
|
</ConditionalExpression>
|
||||||
</ConditionAction.Condition>
|
</ConditionAction.Condition>
|
||||||
@@ -45,12 +54,11 @@
|
|||||||
<ConditionAction.Condition>
|
<ConditionAction.Condition>
|
||||||
<ConditionalExpression ForwardChaining="And">
|
<ConditionalExpression ForwardChaining="And">
|
||||||
<ComparisonCondition LeftOperand="{Binding Opened}" RightOperand="True" />
|
<ComparisonCondition LeftOperand="{Binding Opened}" RightOperand="True" />
|
||||||
<ComparisonCondition LeftOperand="{Binding Selected}" RightOperand="False" />
|
|
||||||
<ComparisonCondition LeftOperand="{Binding #NavigationViewItem.IsChildSelected}" RightOperand="False" />
|
<ComparisonCondition LeftOperand="{Binding #NavigationViewItem.IsChildSelected}" RightOperand="False" />
|
||||||
</ConditionalExpression>
|
</ConditionalExpression>
|
||||||
</ConditionAction.Condition>
|
</ConditionAction.Condition>
|
||||||
<NavigateAction Context="Main" Route="Vault" />
|
<NavigateAction Context="Main" Route="Vault" />
|
||||||
</ConditionAction>
|
</ConditionAction>
|
||||||
</DataTriggerBehavior>
|
</NavigationViewItemInvokedBehaviour>
|
||||||
</Interaction.Behaviors>
|
</Interaction.Behaviors>
|
||||||
</NavigationViewItem>
|
</NavigationViewItem>
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ namespace Bitvault.Avalonia
|
|||||||
{
|
{
|
||||||
public partial class VaultNavigationView : NavigationViewItem
|
public partial class VaultNavigationView : NavigationViewItem
|
||||||
{
|
{
|
||||||
public VaultNavigationView() => InitializeComponent();
|
public VaultNavigationView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
Height="40"
|
Height="40"
|
||||||
Margin="0,4,0,0"
|
Margin="0,4,0,0"
|
||||||
ColumnDefinitions="*,Auto">
|
ColumnDefinitions="*,Auto">
|
||||||
|
<TextBlock Grid.Column="0" Text="Title goes here" />
|
||||||
<Button
|
<Button
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="{StaticResource ButtonWidth}"
|
Width="{StaticResource ButtonWidth}"
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
using Toolkit.Foundation;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using Toolkit.Foundation;
|
||||||
|
|
||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public class CategoriesNavigationViewModel(IServiceProvider provider,
|
public partial class CategoriesNavigationViewModel(IServiceProvider provider,
|
||||||
IServiceFactory factory,
|
IServiceFactory factory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IPublisher publisher,
|
IPublisher publisher,
|
||||||
ISubscriber subscriber,
|
ISubscriber subscriber,
|
||||||
IDisposer disposer) :
|
IDisposer disposer) :
|
||||||
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
||||||
IVaultNavigationViewModel;
|
IVaultNavigationViewModel
|
||||||
|
{
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool selected;
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
namespace Bitvault;
|
using Toolkit.Foundation;
|
||||||
|
|
||||||
public interface IVaultNavigationViewModel;
|
namespace Bitvault;
|
||||||
|
|
||||||
|
public interface IVaultNavigationViewModel : ISelectable;
|
||||||
@@ -38,13 +38,12 @@ public partial class VaultNavigationViewModel :
|
|||||||
|
|
||||||
public Task Handle(Opened args, CancellationToken cancellationToken = default)
|
public Task Handle(Opened args, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
Opened = true;
|
|
||||||
|
|
||||||
Add<AllNavigationViewModel>();
|
Add<AllNavigationViewModel>();
|
||||||
Add<StarredNavigationViewModel>();
|
Add<StarredNavigationViewModel>();
|
||||||
Add<ArchiveNavigationViewModel>();
|
Add<ArchiveNavigationViewModel>();
|
||||||
Add<CategoriesNavigationViewModel>();
|
Add<CategoriesNavigationViewModel>();
|
||||||
|
|
||||||
|
Opened = true;
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ public class VaultViewModelHandler(IServiceFactory factory,
|
|||||||
public async Task Handle(Enumerate<LockerNavigationViewModel> args,
|
public async Task Handle(Enumerate<LockerNavigationViewModel> args,
|
||||||
CancellationToken cancellationToken = default)
|
CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 5000; i++)
|
Random rnd = new Random();
|
||||||
|
int d = rnd.Next(5, 10);
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
if (factory.Create<LockerNavigationViewModel>() is LockerNavigationViewModel viewModel)
|
if (factory.Create<LockerNavigationViewModel>() is LockerNavigationViewModel viewModel)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user