Add dynamic context menus to main grid
This commit is contained in:
parent
451af7bea9
commit
0cc6d6337a
@ -0,0 +1,7 @@
|
|||||||
|
<DataGridTemplateColumn xmlns="https://github.com/avaloniaui"
|
||||||
|
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"
|
||||||
|
x:Class="LibationAvalonia.Controls.DataGridTemplateColumnExt">
|
||||||
|
|
||||||
|
</DataGridTemplateColumn>
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
using Avalonia.Collections;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Markup.Xaml;
|
||||||
|
using LibationAvalonia.ViewModels;
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace LibationAvalonia.Controls
|
||||||
|
{
|
||||||
|
public class DataGridViewCellContextMenuStripNeededEventArgs
|
||||||
|
{
|
||||||
|
private static readonly MethodInfo GetCellValueMethod;
|
||||||
|
static DataGridViewCellContextMenuStripNeededEventArgs()
|
||||||
|
{
|
||||||
|
GetCellValueMethod = typeof(DataGridColumn).GetMethod("GetCellValue", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetCellValue(DataGridColumn column, object item)
|
||||||
|
=> GetCellValueMethod.Invoke(column, new object[] { item, column.ClipboardContentBinding })?.ToString() ?? "";
|
||||||
|
|
||||||
|
public string CellClipboardContents => GetCellValue(Column, GridEntry);
|
||||||
|
public DataGridTemplateColumnExt Column { get; init; }
|
||||||
|
public GridEntry GridEntry { get; init; }
|
||||||
|
public ContextMenu ContextMenu { get; init; }
|
||||||
|
public AvaloniaList<MenuItem> ContextMenuItems
|
||||||
|
=> ContextMenu.Items as AvaloniaList<MenuItem>;
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class DataGridTemplateColumnExt : DataGridTemplateColumn
|
||||||
|
{
|
||||||
|
public event EventHandler<DataGridViewCellContextMenuStripNeededEventArgs> CellContextMenuStripNeeded;
|
||||||
|
|
||||||
|
private readonly ContextMenu ContextMenu = new();
|
||||||
|
private readonly AvaloniaList<MenuItem> MenuItems = new();
|
||||||
|
|
||||||
|
public DataGridTemplateColumnExt()
|
||||||
|
{
|
||||||
|
AvaloniaXamlLoader.Load(this);
|
||||||
|
ContextMenu.Items = MenuItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Cell_ContextRequested(object sender, ContextRequestedEventArgs e)
|
||||||
|
{
|
||||||
|
if (sender is DataGridCell cell && cell.DataContext is GridEntry entry)
|
||||||
|
{
|
||||||
|
var args = new DataGridViewCellContextMenuStripNeededEventArgs
|
||||||
|
{
|
||||||
|
Column = this,
|
||||||
|
GridEntry = entry,
|
||||||
|
ContextMenu = ContextMenu
|
||||||
|
};
|
||||||
|
args.ContextMenuItems.Clear();
|
||||||
|
|
||||||
|
CellContextMenuStripNeeded?.Invoke(sender, args);
|
||||||
|
|
||||||
|
e.Handled = args.ContextMenuItems.Count == 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override IControl GenerateElement(DataGridCell cell, object dataItem)
|
||||||
|
{
|
||||||
|
if (cell.ContextMenu is null)
|
||||||
|
{
|
||||||
|
cell.ContextRequested += Cell_ContextRequested;
|
||||||
|
cell.ContextMenu = ContextMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.GenerateElement(cell, dataItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -89,6 +89,9 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Update="Controls\DataGridTemplateColumnExt.axaml.cs">
|
||||||
|
<DependentUpon>DataGridTemplateColumnExt.axaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Update="Properties\Resources.Designer.cs">
|
<Compile Update="Properties\Resources.Designer.cs">
|
||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
|
|||||||
@ -16,10 +16,11 @@
|
|||||||
AutoGenerateColumns="False"
|
AutoGenerateColumns="False"
|
||||||
Items="{Binding GridEntries}"
|
Items="{Binding GridEntries}"
|
||||||
CanUserSortColumns="True"
|
CanUserSortColumns="True"
|
||||||
|
SelectionMode="Single"
|
||||||
CanUserReorderColumns="True">
|
CanUserReorderColumns="True">
|
||||||
|
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
|
|
||||||
<DataGridTemplateColumn
|
<DataGridTemplateColumn
|
||||||
CanUserSort="True"
|
CanUserSort="True"
|
||||||
IsVisible="{Binding RemoveColumnVisivle}"
|
IsVisible="{Binding RemoveColumnVisivle}"
|
||||||
@ -28,7 +29,7 @@
|
|||||||
IsReadOnly="False"
|
IsReadOnly="False"
|
||||||
SortMemberPath="Remove"
|
SortMemberPath="Remove"
|
||||||
Width="75">
|
Width="75">
|
||||||
|
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<CheckBox
|
<CheckBox
|
||||||
@ -39,22 +40,15 @@
|
|||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</DataGridTemplateColumn>
|
||||||
|
|
||||||
<DataGridTemplateColumn CanUserSort="True" Width="75" Header="Liberate" SortMemberPath="Liberate" ClipboardContentBinding="{Binding Liberate.ToolTip}">
|
<controls:DataGridTemplateColumnExt CanUserSort="True" Width="75" Header="Liberate" SortMemberPath="Liberate" ClipboardContentBinding="{Binding Liberate.ToolTip}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Button Padding="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="LiberateButton_Click" ToolTip.Tip="{Binding Liberate.ToolTip}">
|
<Button Padding="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="LiberateButton_Click" ToolTip.Tip="{Binding Liberate.ToolTip}">
|
||||||
<Image Stretch="None" Source="{Binding Liberate.Image}" />
|
<Image Stretch="None" Source="{Binding Liberate.Image}" />
|
||||||
<Button.ContextMenu>
|
|
||||||
<ContextMenu IsVisible="{Binding !Liberate.IsSeries}">
|
|
||||||
<MenuItem Header="Item 1" Click="ContextMenuItem1_Click" />
|
|
||||||
<MenuItem Header="Item 2" Click="ContextMenuItem2_Click" />
|
|
||||||
<MenuItem Header="Item 3" Click="ContextMenuItem3_Click" />
|
|
||||||
</ContextMenu>
|
|
||||||
</Button.ContextMenu>
|
|
||||||
</Button>
|
</Button>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn CanUserSort="False" Width="80" Header="Cover" SortMemberPath="Cover" ClipboardContentBinding="{Binding LibraryBook.Book.PictureLarge}">
|
<DataGridTemplateColumn CanUserSort="False" Width="80" Header="Cover" SortMemberPath="Cover" ClipboardContentBinding="{Binding LibraryBook.Book.PictureLarge}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
@ -64,7 +58,7 @@
|
|||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</DataGridTemplateColumn>
|
||||||
|
|
||||||
<DataGridTemplateColumn MinWidth="150" Width="2*" Header="Title" CanUserSort="True" SortMemberPath="Title" ClipboardContentBinding="{Binding Title}">
|
<controls:DataGridTemplateColumnExt MinWidth="150" Width="2*" Header="Title" CanUserSort="True" SortMemberPath="Title" ClipboardContentBinding="{Binding Title}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -74,9 +68,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn MinWidth="80" Width="1*" Header="Authors" CanUserSort="True" SortMemberPath="Authors" ClipboardContentBinding="{Binding Authors}">
|
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Authors" CanUserSort="True" SortMemberPath="Authors" ClipboardContentBinding="{Binding Authors}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -86,9 +80,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn MinWidth="80" Width="1*" Header="Narrators" CanUserSort="True" SortMemberPath="Narrators" ClipboardContentBinding="{Binding Narrators}">
|
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Narrators" CanUserSort="True" SortMemberPath="Narrators" ClipboardContentBinding="{Binding Narrators}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -98,9 +92,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn Width="90" Header="Length" CanUserSort="True" SortMemberPath="Length" ClipboardContentBinding="{Binding Length}">
|
<controls:DataGridTemplateColumnExt Width="90" Header="Length" CanUserSort="True" SortMemberPath="Length" ClipboardContentBinding="{Binding Length}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -110,9 +104,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn MinWidth="80" Width="1*" Header="Series" CanUserSort="True" SortMemberPath="Series" ClipboardContentBinding="{Binding Series}">
|
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Series" CanUserSort="True" SortMemberPath="Series" ClipboardContentBinding="{Binding Series}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -122,9 +116,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn MinWidth="100" Width="1*" Header="Description" CanUserSort="True" SortMemberPath="Description" ClipboardContentBinding="{Binding LongDescription}">
|
<controls:DataGridTemplateColumnExt MinWidth="100" Width="1*" Header="Description" CanUserSort="True" SortMemberPath="Description" ClipboardContentBinding="{Binding LongDescription}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -134,9 +128,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn Width="100" Header="Category" CanUserSort="True" SortMemberPath="Category" ClipboardContentBinding="{Binding Category}">
|
<controls:DataGridTemplateColumnExt Width="100" Header="Category" CanUserSort="True" SortMemberPath="Category" ClipboardContentBinding="{Binding Category}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -146,9 +140,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn Width="120" Header="Product
Rating" CanUserSort="True" SortMemberPath="ProductRating" ClipboardContentBinding="{Binding ProductRating}">
|
<controls:DataGridTemplateColumnExt Width="120" Header="Product
Rating" CanUserSort="True" SortMemberPath="ProductRating" ClipboardContentBinding="{Binding ProductRating}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -158,9 +152,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn Width="90" Header="Purchase
Date" CanUserSort="True" SortMemberPath="PurchaseDate" ClipboardContentBinding="{Binding PurchaseDate}">
|
<controls:DataGridTemplateColumnExt Width="90" Header="Purchase
Date" CanUserSort="True" SortMemberPath="PurchaseDate" ClipboardContentBinding="{Binding PurchaseDate}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -170,9 +164,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn Width="120" Header="My Rating" CanUserSort="True" SortMemberPath="MyRating" ClipboardContentBinding="{Binding MyRating}">
|
<controls:DataGridTemplateColumnExt Width="120" Header="My Rating" CanUserSort="True" SortMemberPath="MyRating" ClipboardContentBinding="{Binding MyRating}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -182,9 +176,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn Width="135" Header="Misc" CanUserSort="True" SortMemberPath="Misc" ClipboardContentBinding="{Binding Misc}">
|
<controls:DataGridTemplateColumnExt Width="135" Header="Misc" CanUserSort="True" SortMemberPath="Misc" ClipboardContentBinding="{Binding Misc}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Panel Background="{Binding BackgroundBrush}">
|
<Panel Background="{Binding BackgroundBrush}">
|
||||||
@ -194,9 +188,9 @@
|
|||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<DataGridTemplateColumn CanUserSort="True" Width="100" Header="Tags" SortMemberPath="BookTags" ClipboardContentBinding="{Binding BookTags.Tags}">
|
<controls:DataGridTemplateColumnExt CanUserSort="True" Width="100" Header="Tags" SortMemberPath="BookTags" ClipboardContentBinding="{Binding BookTags.Tags}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
@ -209,7 +203,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
</DataGrid.Columns>
|
</DataGrid.Columns>
|
||||||
</DataGrid>
|
</DataGrid>
|
||||||
|
|||||||
@ -10,7 +10,7 @@ using LibationAvalonia.Dialogs;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Avalonia.Interactivity;
|
using LibationAvalonia.Controls;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
@ -53,7 +53,7 @@ namespace LibationAvalonia.Views
|
|||||||
{
|
{
|
||||||
column.CustomSortComparer = new RowComparer(column);
|
column.CustomSortComparer = new RowComparer(column);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RemoveColumn_PropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e)
|
private void RemoveColumn_PropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
@ -71,6 +71,29 @@ namespace LibationAvalonia.Views
|
|||||||
productsGrid = this.FindControl<DataGrid>(nameof(productsGrid));
|
productsGrid = this.FindControl<DataGrid>(nameof(productsGrid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Cell Context Menu
|
||||||
|
|
||||||
|
public void ProductsGrid_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs args)
|
||||||
|
{
|
||||||
|
if (args.Column.SortMemberPath == "Liberate")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// any non-stop light column
|
||||||
|
// (except for the Cover column which does not have a context menu)
|
||||||
|
var menuItem = new MenuItem { Header = "_Copy Cell Contents" };
|
||||||
|
|
||||||
|
menuItem.Click += async (s, e)
|
||||||
|
=> await Application.Current.Clipboard.SetTextAsync(args.CellClipboardContents);
|
||||||
|
|
||||||
|
args.ContextMenuItems.Add(menuItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Column Customizations
|
#region Column Customizations
|
||||||
|
|
||||||
private void Configure_ColumnCustomization()
|
private void Configure_ColumnCustomization()
|
||||||
@ -96,6 +119,10 @@ namespace LibationAvalonia.Views
|
|||||||
|
|
||||||
foreach (var column in productsGrid.Columns)
|
foreach (var column in productsGrid.Columns)
|
||||||
{
|
{
|
||||||
|
//Wire up column context menu
|
||||||
|
if (column is DataGridTemplateColumnExt tc)
|
||||||
|
tc.CellContextMenuStripNeeded += ProductsGrid_CellContextMenuStripNeeded;
|
||||||
|
|
||||||
var itemName = column.SortMemberPath;
|
var itemName = column.SortMemberPath;
|
||||||
|
|
||||||
if (itemName == nameof(GridEntry.Remove))
|
if (itemName == nameof(GridEntry.Remove))
|
||||||
@ -185,22 +212,6 @@ namespace LibationAvalonia.Views
|
|||||||
|
|
||||||
#region Button Click Handlers
|
#region Button Click Handlers
|
||||||
|
|
||||||
public void ContextMenuItem1_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args)
|
|
||||||
{
|
|
||||||
var lbe = getBoundEntry(args.Source);
|
|
||||||
}
|
|
||||||
public void ContextMenuItem2_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args)
|
|
||||||
{
|
|
||||||
var lbe = getBoundEntry(args.Source);
|
|
||||||
}
|
|
||||||
public void ContextMenuItem3_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args)
|
|
||||||
{
|
|
||||||
var lbe = getBoundEntry(args.Source);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static LibraryBookEntry getBoundEntry(IInteractive source)
|
|
||||||
=> (source is IStyledElement se && se.DataContext is LibraryBookEntry lbe ? lbe : null);
|
|
||||||
|
|
||||||
public void LiberateButton_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args)
|
public void LiberateButton_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args)
|
||||||
{
|
{
|
||||||
var button = args.Source as Button;
|
var button = args.Source as Button;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user