mirror of
https://github.com/wismna/ModernKeePass.git
synced 2025-10-03 15:40:18 -04:00
Restored CollectionViewSource for recent (issue with WinRT 8.1) Forbid horizontal scrolling in Main Menu Fixed an incorrect SetupFocusAction target object binding
300 lines
20 KiB
XML
300 lines
20 KiB
XML
<Page
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:converters="using:ModernKeePass.Converters"
|
|
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
|
|
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
|
|
xmlns:actions="using:ModernKeePass.Actions"
|
|
xmlns:userControls="using:ModernKeePass.Views.UserControls"
|
|
x:Class="ModernKeePass.Views.GroupDetailPage"
|
|
mc:Ignorable="d"
|
|
SizeChanged="GroupDetailPage_OnSizeChanged"
|
|
DataContext="{Binding Source={StaticResource Locator}, Path=Group}">
|
|
<Page.Resources>
|
|
<converters:ColorToBrushConverter x:Key="ColorToBrushConverter"/>
|
|
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
|
|
<converters:InverseBooleanToVisibilityConverter x:Key="InverseBooleanToVisibilityConverter"/>
|
|
<converters:IconToSymbolConverter x:Key="IconToSymbolConverter"/>
|
|
</Page.Resources>
|
|
<Grid>
|
|
<Grid.Resources>
|
|
<CollectionViewSource
|
|
x:Name="EntriesZoomedOutViewSource"
|
|
Source="{Binding EntriesZoomedOut}" IsSourceGrouped="True" />
|
|
</Grid.Resources>
|
|
<Grid.Background>
|
|
<StaticResource ResourceKey="ApplicationPageBackgroundThemeBrush"/>
|
|
</Grid.Background>
|
|
<Grid.ChildrenTransitions>
|
|
<TransitionCollection>
|
|
<EntranceThemeTransition/>
|
|
</TransitionCollection>
|
|
</Grid.ChildrenTransitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="{StaticResource MenuHeightGridLength}"/>
|
|
<RowDefinition Height="*"/>
|
|
</Grid.RowDefinitions>
|
|
<Grid Grid.Row="1">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid Grid.Column="1">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="50" />
|
|
<RowDefinition Height="*" />
|
|
</Grid.RowDefinitions>
|
|
<TextBlock Grid.Column="0" Grid.Row="0" x:Uid="ReorderEntriesLabel" Margin="10,10,0,0" Visibility="{Binding IsEditMode, Converter={StaticResource BooleanToVisibilityConverter}}" Style="{StaticResource BodyTextBlockStyle}" />
|
|
<HyperlinkButton Grid.Column="2" Grid.Row="0" VerticalAlignment="Top" Command="{Binding CreateEntryCommand}" HorizontalAlignment="Right">
|
|
<StackPanel Orientation="Horizontal">
|
|
<SymbolIcon Symbol="Add">
|
|
<ToolTipService.ToolTip>
|
|
<ToolTip x:Uid="AddEntryTooltip" />
|
|
</ToolTipService.ToolTip>
|
|
</SymbolIcon>
|
|
<TextBlock x:Name="AddEntryTextBlock" x:Uid="GroupCreateEntry" VerticalAlignment="Center" Margin="10,0,0,0" />
|
|
</StackPanel>
|
|
</HyperlinkButton>
|
|
|
|
<SemanticZoom x:Name="SemanticZoom" Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="1" ViewChangeStarted="SemanticZoom_ViewChangeStarted" ScrollViewer.HorizontalScrollBarVisibility="Visible">
|
|
<SemanticZoom.ZoomedInView>
|
|
<!-- Horizontal scrolling grid -->
|
|
<GridView
|
|
x:Name="GridView"
|
|
ItemsSource="{Binding Entries}"
|
|
AutomationProperties.AutomationId="ItemGridView"
|
|
AutomationProperties.Name="Entries"
|
|
TabIndex="1"
|
|
IsSynchronizedWithCurrentItem="False"
|
|
BorderBrush="{StaticResource ListViewItemSelectedBackgroundThemeBrush}"
|
|
AllowDrop="True"
|
|
CanReorderItems="{Binding IsEditMode}"
|
|
CanDragItems="{Binding IsEditMode}">
|
|
<interactivity:Interaction.Behaviors>
|
|
<core:DataTriggerBehavior Binding="{Binding IsEditMode}" Value="False">
|
|
<actions:SetupFocusAction TargetObject="{Binding ElementName=GridView}" />
|
|
</core:DataTriggerBehavior>
|
|
<core:EventTriggerBehavior EventName="SelectionChanged">
|
|
<core:InvokeCommandAction Command="{Binding GoToEntryCommand}" CommandParameter="{Binding SelectedItem, ElementName=GridView}" />
|
|
</core:EventTriggerBehavior>
|
|
</interactivity:Interaction.Behaviors>
|
|
<GridView.ItemTemplate>
|
|
<DataTemplate>
|
|
<Grid Height="110" Width="480" x:Name="EntryGrid">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto"/>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<Border Grid.Column="0" Background="{Binding BackgroundColor, ConverterParameter={StaticResource MainColorBrush}, Converter={StaticResource ColorToBrushConverter}}">
|
|
<Viewbox MaxHeight="50" Width="100">
|
|
<SymbolIcon Symbol="{Binding Icon, Converter={StaticResource IconToSymbolConverter}}" Foreground="{StaticResource TextColorLightBrush}" />
|
|
</Viewbox>
|
|
</Border>
|
|
<StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,10,0,0" >
|
|
<TextBlock x:Name="NameTextBlock" Text="{Binding Title}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="{Binding ForegroundColor, ConverterParameter={StaticResource TextBoxForegroundThemeBrush}, Converter={StaticResource ColorToBrushConverter}}"/>
|
|
<TextBlock Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap" />
|
|
<TextBlock Text="{Binding Username}" Style="{StaticResource BodyTextBlockStyle}" Foreground="{Binding ForegroundColor, ConverterParameter={StaticResource TextBoxForegroundThemeBrush}, Converter={StaticResource ColorToBrushConverter}}" MaxHeight="60" />
|
|
<TextBlock Text="{Binding Url}" Style="{StaticResource BodyTextBlockStyle}" Foreground="{Binding ForegroundColor, ConverterParameter={StaticResource TextBoxForegroundThemeBrush}, Converter={StaticResource ColorToBrushConverter}}" MaxHeight="60" />
|
|
</StackPanel>
|
|
<Button Grid.Column="2" Style="{StaticResource NoBorderButtonStyle}" Background="{StaticResource AppBarBackgroundThemeBrush}" VerticalAlignment="Bottom">
|
|
<SymbolIcon Symbol="More" />
|
|
<Button.Flyout>
|
|
<MenuFlyout>
|
|
<MenuFlyoutItem x:Uid="EntryItemCopyLogin">
|
|
<interactivity:Interaction.Behaviors>
|
|
<core:EventTriggerBehavior EventName="Click">
|
|
<actions:ClipboardAction Text="{Binding Username}" />
|
|
<actions:ToastAction x:Uid="ToastCopyLogin" Title="{Binding Title}" />
|
|
</core:EventTriggerBehavior>
|
|
</interactivity:Interaction.Behaviors>
|
|
</MenuFlyoutItem>
|
|
<MenuFlyoutItem x:Uid="EntryItemCopyPassword">
|
|
<interactivity:Interaction.Behaviors>
|
|
<core:EventTriggerBehavior EventName="Click">
|
|
<actions:ClipboardAction Text="{Binding Password}" IsProtected="True" />
|
|
<actions:ToastAction x:Uid="ToastCopyPassword" Title="{Binding Title}" />
|
|
</core:EventTriggerBehavior>
|
|
</interactivity:Interaction.Behaviors>
|
|
</MenuFlyoutItem>
|
|
<MenuFlyoutItem x:Uid="EntryItemCopyUrl" IsEnabled="{Binding IsValidUrl}">
|
|
<interactivity:Interaction.Behaviors>
|
|
<core:EventTriggerBehavior EventName="Click">
|
|
<actions:NavigateToUrlAction Url="{Binding Url}" />
|
|
</core:EventTriggerBehavior>
|
|
</interactivity:Interaction.Behaviors>
|
|
</MenuFlyoutItem>
|
|
</MenuFlyout>
|
|
</Button.Flyout>
|
|
</Button>
|
|
</Grid>
|
|
</DataTemplate>
|
|
</GridView.ItemTemplate>
|
|
</GridView>
|
|
</SemanticZoom.ZoomedInView>
|
|
<SemanticZoom.ZoomedOutView>
|
|
<GridView
|
|
ItemsSource="{Binding Source={StaticResource EntriesZoomedOutViewSource}}"
|
|
SelectionMode="None"
|
|
IsSynchronizedWithCurrentItem="False">
|
|
<GridView.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<VariableSizedWrapGrid Orientation="Vertical" ItemWidth="140" />
|
|
</ItemsPanelTemplate>
|
|
</GridView.ItemsPanel>
|
|
<GridView.ItemTemplate>
|
|
<DataTemplate>
|
|
<TextBlock Width="100" Margin="5,0,0,0" Text="{Binding Title}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap"/>
|
|
</DataTemplate>
|
|
</GridView.ItemTemplate>
|
|
<GridView.GroupStyle>
|
|
<GroupStyle HidesIfEmpty="True">
|
|
<GroupStyle.HeaderTemplate>
|
|
<DataTemplate>
|
|
<StackPanel Orientation="Vertical" HorizontalAlignment="Left">
|
|
<TextBlock Text="{Binding Key}" Width="50" Margin="20" Foreground="{StaticResource MainColorBrush}" Style="{StaticResource SubheaderTextBlockStyle}" TextAlignment="Center" />
|
|
<Border BorderBrush="DarkGray" BorderThickness="0,0,0,1" />
|
|
</StackPanel>
|
|
</DataTemplate>
|
|
</GroupStyle.HeaderTemplate>
|
|
</GroupStyle>
|
|
</GridView.GroupStyle>
|
|
</GridView>
|
|
</SemanticZoom.ZoomedOutView>
|
|
</SemanticZoom>
|
|
</Grid>
|
|
<userControls:HamburgerMenuUserControl
|
|
Grid.Column="0"
|
|
x:Name="HamburgerMenu"
|
|
x:Uid="GroupsLeftListView"
|
|
ItemsSource="{Binding Groups}"
|
|
CanDragItems="{Binding IsEditMode}"
|
|
ActionButtonCommand="{Binding CreateGroupCommand}"
|
|
IsButtonVisible="Visible">
|
|
<interactivity:Interaction.Behaviors>
|
|
<core:EventTriggerBehavior EventName="SelectionChanged">
|
|
<core:InvokeCommandAction Command="{Binding GoToGroupCommand}" CommandParameter="{Binding SelectedItem, ElementName=HamburgerMenu}" />
|
|
</core:EventTriggerBehavior>
|
|
</interactivity:Interaction.Behaviors>
|
|
</userControls:HamburgerMenuUserControl>
|
|
</Grid>
|
|
<!-- Back button and page title -->
|
|
<Grid Grid.Row="0" Background="{ThemeResource AppBarBackgroundThemeBrush}">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="{StaticResource MenuWidthGridLength}"/>
|
|
<ColumnDefinition Width="{StaticResource MenuWidthGridLength}"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<Button Grid.Column="0"
|
|
Command="{Binding GoBackCommand}"
|
|
Height="{StaticResource MenuHeight}"
|
|
Width="{StaticResource MenuWidth}"
|
|
AutomationProperties.Name="Back"
|
|
AutomationProperties.AutomationId="BackButton"
|
|
AutomationProperties.ItemType="Navigation Button"
|
|
Style="{StaticResource NoBorderButtonStyle}">
|
|
<SymbolIcon Symbol="Back" />
|
|
</Button>
|
|
<Button Grid.Column="1"
|
|
Height="{StaticResource MenuHeight}"
|
|
Width="{StaticResource MenuWidth}"
|
|
Command="{Binding GoToParentCommand}"
|
|
Style="{StaticResource NoBorderButtonStyle}">
|
|
<SymbolIcon Symbol="Up" />
|
|
<ToolTipService.ToolTip>
|
|
<ToolTip Content="{Binding ParentGroupName}" />
|
|
</ToolTipService.ToolTip>
|
|
</Button>
|
|
<Viewbox Grid.Column="2" MaxHeight="200" Visibility="{Binding IsEditMode, Converter={StaticResource BooleanToVisibilityConverter}}">
|
|
<userControls:SymbolPickerUserControl Width="100" Height="70" SelectedSymbol="{Binding Icon, Mode=TwoWay}" />
|
|
</Viewbox>
|
|
<Viewbox Grid.Column="2" MaxHeight="200" Visibility="{Binding IsEditMode, Converter={StaticResource InverseBooleanToVisibilityConverter}}">
|
|
<SymbolIcon Symbol="{Binding Icon}" Width="100" Height="70" />
|
|
</Viewbox>
|
|
<TextBox Grid.Column="3"
|
|
x:Uid="GroupTitle"
|
|
x:Name="TitleTextBox"
|
|
Text="{Binding Title, Mode=TwoWay}"
|
|
Background="Transparent"
|
|
IsHitTestVisible="{Binding IsEditMode}"
|
|
FontSize="20"
|
|
FontWeight="Light"
|
|
TextWrapping="NoWrap"
|
|
VerticalAlignment="Center">
|
|
<interactivity:Interaction.Behaviors>
|
|
<core:DataTriggerBehavior Binding="{Binding IsEditMode}" Value="True">
|
|
<actions:SetupFocusAction TargetObject="{Binding ElementName=TitleTextBox}" />
|
|
<core:ChangePropertyAction TargetObject="{Binding ElementName=TitleTextBox}" PropertyName="BorderThickness" Value="2" />
|
|
</core:DataTriggerBehavior>
|
|
<core:DataTriggerBehavior Binding="{Binding IsEditMode}" Value="False">
|
|
<core:ChangePropertyAction TargetObject="{Binding ElementName=TitleTextBox}" PropertyName="BorderThickness" Value="0" />
|
|
</core:DataTriggerBehavior>
|
|
</interactivity:Interaction.Behaviors>
|
|
</TextBox>
|
|
<userControls:TopMenuUserControl x:Name="TopMenu" Grid.Column="4"
|
|
SortButtonVisibility="{Binding IsEditMode, Converter={StaticResource BooleanToVisibilityConverter}}"
|
|
IsEditButtonChecked="{Binding IsEditMode, Mode=TwoWay}"
|
|
SaveCommand="{Binding SaveCommand}"
|
|
MoveCommand="{Binding MoveCommand}"
|
|
SortEntriesCommand="{Binding SortEntriesCommand}"
|
|
SortGroupsCommand="{Binding SortGroupsCommand}"
|
|
DeleteCommand="{Binding DeleteCommand}">
|
|
<interactivity:Interaction.Behaviors>
|
|
<core:EventTriggerBehavior EventName="EditButtonClick">
|
|
<actions:SetupFocusAction TargetObject="{Binding ElementName=TitleTextBox}" />
|
|
</core:EventTriggerBehavior>
|
|
</interactivity:Interaction.Behaviors>
|
|
</userControls:TopMenuUserControl>
|
|
|
|
</Grid>
|
|
<VisualStateManager.VisualStateGroups>
|
|
<VisualStateGroup x:Name="PageLayout">
|
|
<VisualState x:Name="Small">
|
|
<Storyboard>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="AddEntryTextBlock" Storyboard.TargetProperty="Visibility">
|
|
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="HamburgerMenu" Storyboard.TargetProperty="IsOpen">
|
|
<DiscreteObjectKeyFrame KeyTime="0" Value="False"/>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SemanticZoom" Storyboard.TargetProperty="Margin">
|
|
<DiscreteObjectKeyFrame KeyTime="0" Value="-60,0,0,0"/>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
</Storyboard>
|
|
</VisualState>
|
|
<VisualState x:Name="Medium">
|
|
<Storyboard>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="HamburgerMenu" Storyboard.TargetProperty="IsOpen">
|
|
<DiscreteObjectKeyFrame KeyTime="0" Value="False"/>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SemanticZoom" Storyboard.TargetProperty="Margin">
|
|
<DiscreteObjectKeyFrame KeyTime="0" Value="0,0,0,0"/>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
</Storyboard>
|
|
</VisualState>
|
|
<VisualState x:Name="Large">
|
|
<Storyboard>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="AddEntryTextBlock" Storyboard.TargetProperty="Visibility">
|
|
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="HamburgerMenu" Storyboard.TargetProperty="IsOpen">
|
|
<DiscreteObjectKeyFrame KeyTime="0" Value="True"/>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SemanticZoom" Storyboard.TargetProperty="Margin">
|
|
<DiscreteObjectKeyFrame KeyTime="0" Value="0,0,0,0"/>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
</Storyboard>
|
|
</VisualState>
|
|
</VisualStateGroup>
|
|
</VisualStateManager.VisualStateGroups>
|
|
</Grid>
|
|
</Page> |