Вы можете использовать что-то вроде:
<Expander Grid.Column="0" ExpandDirection="Right" Width="auto" IsExpanded="false" Header="Options" Background="#ececec" Padding="5">
<StackPanel>
<Label Content="Columns:" FontWeight="SemiBold" />
<ItemsControl ItemsSource="{Binding ElementName=DataGridName, Path=Columns}" Grid.IsSharedSizeScope="True" Margin="5">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
<ColumnDefinition SharedSizeGroup="B"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Header}" Margin="20, 5, 5, 0"/>
<CheckBox Grid.Column="1" IsChecked="{Binding Visibility, Converter=cnv:CustomVisibilityToBool CollapsedValue=False, VisibleValue=True}}"
Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Expander>
Конвертер:
class CustomVisibilityToBool : MarkupExtension, IValueConverter
{
public bool VisibleValue { get; set; }
public bool CollapsedValue { get; set; }
public bool HiddenValue { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((value as Visibility?) == Visibility.Visible) return VisibleValue;
else if ((value as Visibility?) == Visibility.Hidden) return HiddenValue;
else if ((value as Visibility?) == Visibility.Collapsed) return CollapsedValue;
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((value as bool?) == VisibleValue) return Visibility.Visible;
else if ((value as bool?) == HiddenValue) return Visibility.Hidden;
else if ((value as bool?) == CollapsedValue) return Visibility.Collapsed;
return Binding.DoNothing;
}
}
Что, если вы поместите рядом с DataGrid
, будет выглядеть так: ![enter image description here](https://i.stack.imgur.com/YChw9.png)