Added playlists view context menu for rename, lock/unlock, and delete.

This commit is contained in:
2026-08-09 17:30:38 -04:00
parent cf8a40ee52
commit 91e4d88643
6 changed files with 154 additions and 15 deletions

View File

@@ -7,11 +7,15 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:Harmonia.WinUI.ViewModels"
xmlns:converter="using:Harmonia.WinUI.Converters"
xmlns:playlists="using:Harmonia.Core.Playlists"
DataContext="{Binding Source={StaticResource Locator}, Path=PlaylistsViewModel}"
d:DataContext="{d:DesignInstance Type=vm:PlaylistsViewModel, IsDesignTimeCreatable=True}"
mc:Ignorable="d">
<UserControl.Resources>
<converter:BooleanToVisibilityConverter x:Key="BoolToVis" />
<converter:BooleanToVisibilityConverter x:Key="InverseBoolToVis" TrueValue="Collapsed" FalseValue="Visible"/>
<SolidColorBrush x:Key="PlaylistItemIconBrush" Color="#dddddd"/>
<SolidColorBrush x:Key="PlaylistItemTitleBrush" Color="#dddddd"/>
<SolidColorBrush x:Key="PlaylistItemSubtitleBrush" Color="#aaaaaa"/>
@@ -76,7 +80,44 @@
Name="PlaylistsListView"
ItemsSource="{Binding Playlists, Mode=OneWay}"
SelectedItem="{Binding SelectedPlaylist, Mode=TwoWay}"
ItemTemplate="{StaticResource PlaylistTemplate}">
ItemTemplate="{StaticResource PlaylistTemplate}"
RightTapped="PlaylistsListView_RightTapped">
<ListView.ContextFlyout>
<MenuFlyout
x:Name="PlaylistListViewMenuFlyout"
ShouldConstrainToRootBounds="False"
SystemBackdrop="{StaticResource AcrylicBackgroundFillColorDefaultBackdrop}">
<MenuFlyout.MenuFlyoutPresenterStyle>
<Style TargetType="MenuFlyoutPresenter">
<Setter Property="Padding" Value="10"></Setter>
<Setter Property="Background" Value="Transparent"></Setter>
</Style>
</MenuFlyout.MenuFlyoutPresenterStyle>
<MenuFlyoutItem Text="{Binding FlyoutPlaylist.Name}" IsEnabled="False" FontWeight="SemiLight">
<MenuFlyoutItem.Resources>
<SolidColorBrush x:Key="MenuFlyoutItemForegroundDisabled" Color="#aaaaaa"/>
</MenuFlyoutItem.Resources>
</MenuFlyoutItem>
<MenuFlyoutSeparator></MenuFlyoutSeparator>
<MenuFlyoutItem Text="Rename" Command="{Binding RenamePlaylistCommand}" CommandParameter="{Binding FlyoutPlaylist}">
</MenuFlyoutItem>
<MenuFlyoutItem Text="Lock" Command="{Binding LockPlaylistCommand}" CommandParameter="{Binding FlyoutPlaylist}" Visibility="{Binding FlyoutPlaylist.IsLocked, Converter={StaticResource InverseBoolToVis}}">
</MenuFlyoutItem>
<MenuFlyoutItem Text="Unlock" Command="{Binding UnlockPlaylistCommand}" CommandParameter="{Binding FlyoutPlaylist}" Visibility="{Binding FlyoutPlaylist.IsLocked, Converter={StaticResource BoolToVis}}">
</MenuFlyoutItem>
<MenuFlyoutSeparator></MenuFlyoutSeparator>
<MenuFlyoutItem Text="Remove" Foreground="#ff99a4" Command="{Binding DeletePlaylistCommand}" CommandParameter="{Binding FlyoutPlaylist}">
</MenuFlyoutItem>
</MenuFlyout>
</ListView.ContextFlyout>
</ListView>
</Grid>
</UserControl>

View File

@@ -19,6 +19,16 @@ public sealed partial class PlaylistsView : UserControl
_viewModel.PropertyChanged += OnViewModelPropertyChanged;
PlaylistsListView.ContainerContentChanging += OnContainerContentChanging;
foreach (MenuFlyoutItemBase item in PlaylistListViewMenuFlyout.Items)
{
item.DataContext = _viewModel;
}
}
private void PlaylistsListView_RightTapped(object sender, Microsoft.UI.Xaml.Input.RightTappedRoutedEventArgs e)
{
_viewModel.FlyoutPlaylist = (e.OriginalSource as FrameworkElement)?.DataContext as PlaylistItemViewModel;
}
private void OnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)