| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | using System.Collections.Generic;using System.Linq;using System.Windows;using System.Windows.Controls;using System.Windows.Controls.Primitives;using System.Windows.Data;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using InABox.Core;using InABox.WPF;using Syncfusion.UI.Xaml.Grid;using Syncfusion.UI.Xaml.TreeGrid;namespace InABox.DynamicGrid;public class DynamicGridCheckBoxColumn<TEntity> : DynamicGridEditorColumn<TEntity, CheckBoxEditor, GridTemplateColumn, TreeGridTemplateColumn>    where TEntity : BaseObject, new(){    private readonly BitmapImage ticked = Wpf.Resources.Bullet_Tick.AsBitmapImage();    private readonly BitmapImage unticked = null; //Wpf.Resources.tick.AsGrayScale().AsBitmapImage();    private DataTemplate CreateCellTemplate(string mapping)    {        return TemplateGenerator.CreateDataTemplate        (            () =>            {                var result = new Image() { Margin = new Thickness(2) };                result.SetBinding(                    Image.SourceProperty,                     new Binding()                    {                        Path = new PropertyPath(mapping),                         Converter = new BoolToImageConverter()                    }                );                return result;            }        );    }    private DataTemplate CreateEditTemplate(string mapping)    {        return TemplateGenerator.CreateDataTemplate        (            () =>            {                DockPanel dock = new DockPanel();                dock.Children.Add(CreateImage(mapping, ticked, Visibility.Visible, Visibility.Collapsed, BindingMode.TwoWay));                dock.Children.Add(CreateImage(mapping, unticked, Visibility.Collapsed, Visibility.Visible, BindingMode.TwoWay));                Border border = new Border()                {                    Background = new SolidColorBrush(Colors.White),                    Child = dock                };                                border.PreviewMouseDown += (sender, args) =>                {                    if (sender is Border b && b.Child is DockPanel d)                        ToggleImages(d);                    args.Handled = true;                };                border.KeyUp += (sender, args) =>                {                    if (args.Key == Key.Space && sender is Border b && b.Child is DockPanel d)                        ToggleImages(d);                    args.Handled = true;                };                return border;            }        );    }        protected override void Configure(GridTemplateColumn column, CheckBoxEditor editor)    {        column.CellTemplate = CreateCellTemplate(MappingName);        column.EditTemplate = CreateEditTemplate(MappingName);        column.SetCellBoundValue = false;    }    protected override void Configure(TreeGridTemplateColumn column, CheckBoxEditor editor)    {        column.CellTemplate = CreateCellTemplate(TreeMappingName);        column.EditTemplate = CreateEditTemplate(TreeMappingName);        column.SetCellBoundValue = false;    }    private static void ToggleImages(DockPanel d)    {        var t = d.Children.OfType<Image>().First();        var u = d.Children.OfType<Image>().Last();        t.Visibility = t.Visibility == Visibility.Visible            ? Visibility.Collapsed            : Visibility.Visible;        u.Visibility = u.Visibility == Visibility.Visible            ? Visibility.Collapsed            : Visibility.Visible;    }    private Image CreateImage(string mapping, BitmapImage source, Visibility truevalue, Visibility falsevalue, BindingMode mode)    {        var image = new Image() { Source = source, Margin = new Thickness(2) };        image.SetValue(DockPanel.DockProperty,Dock.Top);        image.SetBinding(            Image.VisibilityProperty,             new Binding()            {                Path = new PropertyPath(mapping),                 Converter = new WPF.BooleanToVisibilityConverter() { TrueValue = truevalue, FalseValue = falsevalue },                 Mode = mode            }        );        image.PreviewMouseDown += (sender, args) =>        {            if (sender is Image i)                i.Visibility = i.Visibility == truevalue                    ? falsevalue                    : truevalue;            args.Handled = true;        };        image.KeyUp += (sender, args) =>        {            if (args.Key == Key.Space && sender is Image i)                i.Visibility = i.Visibility == truevalue                    ? falsevalue                    : truevalue;            args.Handled = true;        };        return image;    }    public override bool Filtered => false;    public override bool VariableWidth => false;    public DynamicGridCheckBoxColumn(DynamicGridColumn definition) : base(definition)    {    }}
 |