private void dataGrid_FilterLoading(object sender, DataGridColumnEditableValueEventArgs <IDataGridFilter> e) { var column = e.Column; var multiValueFilter = new DataGridMultiValueFilter(); multiValueFilter.Style = Resources["VirtualizingMultiValueFilter"] as Style; multiValueFilter.SetBinding(DataGridMultiValueFilter.BackgroundProperty, dataGrid, dg => dg.HeaderBackground); multiValueFilter.SetBinding(DataGridMultiValueFilter.ForegroundProperty, dataGrid, dg => dg.HeaderForeground); multiValueFilter.SetBinding(DataGridMultiValueFilter.BorderBrushProperty, dataGrid, dg => dg.BorderBrush); multiValueFilter.SetBinding(DataGridMultiValueFilter.MouseOverBrushProperty, dataGrid, dg => dg.MouseOverBrush); multiValueFilter.SetBinding(DataGridMultiValueFilter.PressedBrushProperty, dataGrid, dg => dg.PressedBrush); multiValueFilter.SetBinding(DataGridMultiValueFilter.InputBackgroundProperty, dataGrid, dg => dg.RowBackground); multiValueFilter.SetBinding(DataGridMultiValueFilter.InputForegroundProperty, dataGrid, dg => dg.RowForeground); (e.Value as DataGridFilter).InnerControl = multiValueFilter; }
public override IDataGridFilter GetFilter() { var colorsFilter = new DataGridMultiValueFilter(); colorsFilter.ItemTemplate = XamlReader.Parse(@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:local=""clr-namespace:DataGridSamples;assembly=" + new AssemblyName(Assembly.GetExecutingAssembly().FullName).Name + @""" xmlns:c1=""http://schemas.componentone.com/winfx/2006/xaml""> <StackPanel Orientation=""Horizontal""> <StackPanel.Resources> <local:ColorConverter x:Key=""colorConverter""/> </StackPanel.Resources> <c1:C1CheckeredBorder BorderThickness=""1"" BorderBrush=""Black"" Background=""{Binding Converter={StaticResource colorConverter}}"" Width=""12"" Height=""12"" VerticalAlignment=""Center""/> <TextBlock Text=""{Binding}"" VerticalAlignment=""Center"" Margin=""2 0 0 0 ""/> </StackPanel> </DataTemplate>") as DataTemplate; colorsFilter.SetBinding(DataGridMultiValueFilter.ItemsSourceProperty, new Binding("ItemsSource") { Source = DataGrid, Converter = CustomConverter.Create((value, type, parameter, culture) => { if (value is IEnumerable) { var enumerable = ((IEnumerable)value).Cast <object>(); var colorConverter = new ColorConverter(); return(enumerable.Select(o => C1DataGridFilterHelper.GetPropertyValue <object>(o, FilterMemberPath)).Distinct().Select(o => (Color)colorConverter.Convert(o, typeof(Color), null, CultureInfo.CurrentCulture)).OrderBy(c => new C1HslColor(c).Hue)); } return(value); }) }); colorsFilter.SetBinding(DataGridMultiValueFilter.BackgroundProperty, new Binding("HeaderBackground") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.ForegroundProperty, new Binding("HeaderForeground") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.BorderBrushProperty, new Binding("BorderBrush") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.MouseOverBrushProperty, new Binding("MouseOverBrush") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.PressedBrushProperty, new Binding("PressedBrush") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.FocusBrushProperty, new Binding("SelectedBackground") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.InputBackgroundProperty, new Binding("RowBackground") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.InputForegroundProperty, new Binding("RowForeground") { Source = DataGrid }); var filter = new DataGridContentFilter { Content = new DataGridFilterList { Items = new List <IDataGridFilterUnity> { new DataGridTextFilter(), colorsFilter, } } }; return(filter); }
public override IDataGridFilter GetFilter() { var colorsFilter = new DataGridMultiValueFilter(); colorsFilter.ItemTemplate = XamlReader.Parse(@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:local=""clr-namespace:DataGridSamples;assembly=" + new AssemblyName(Assembly.GetExecutingAssembly().FullName).Name + @""" xmlns:c1=""http://schemas.componentone.com/winfx/2006/xaml""> <StackPanel Orientation=""Horizontal""> <StackPanel.Resources> <local:ColorConverter x:Key=""colorConverter""/> </StackPanel.Resources> <c1:C1CheckeredBorder BorderThickness=""1"" BorderBrush=""Black"" Background=""{Binding Converter={StaticResource colorConverter}}"" Width=""12"" Height=""12"" VerticalAlignment=""Center""/> <TextBlock Text=""{Binding}"" VerticalAlignment=""Center"" Margin=""2 0 0 0 ""/> </StackPanel> </DataTemplate>") as DataTemplate; colorsFilter.SetBinding(DataGridMultiValueFilter.ItemsSourceProperty, new Binding("ItemsSource") { Source = DataGrid, Converter = CustomConverter.Create((value, type, parameter, culture) => { if (value is IEnumerable) { var enumerable = ((IEnumerable)value).Cast<object>(); var colorConverter = new ColorConverter(); return enumerable.Select(o => C1DataGridFilterHelper.GetPropertyValue<object>(o, FilterMemberPath)).Distinct().Select(o => (Color)colorConverter.Convert(o, typeof(Color), null, CultureInfo.CurrentCulture)).OrderBy(c => new C1HslColor(c).Hue); } return value; }) }); colorsFilter.SetBinding(DataGridMultiValueFilter.BackgroundProperty, new Binding("HeaderBackground") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.ForegroundProperty, new Binding("HeaderForeground") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.BorderBrushProperty, new Binding("BorderBrush") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.MouseOverBrushProperty, new Binding("MouseOverBrush") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.PressedBrushProperty, new Binding("PressedBrush") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.FocusBrushProperty, new Binding("SelectedBackground") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.InputBackgroundProperty, new Binding("RowBackground") { Source = DataGrid }); colorsFilter.SetBinding(DataGridMultiValueFilter.InputForegroundProperty, new Binding("RowForeground") { Source = DataGrid }); var filter = new DataGridContentFilter { Content = new DataGridFilterList { Items = new List<IDataGridFilterUnity> { new DataGridTextFilter(), colorsFilter, } } }; return filter; }