c# - 在 Data Grid 的最后一个 Data Column 上放置一个上下文菜单来控制 WPF 中其他列的可见性
问题描述
如何在 DataGrid 的最后一个数据列上放置上下文菜单,以便它可以控制其他列的可见性。
我有一个共有 8 列的数据网格。如何在最后一列放置上下文菜单?需要了解是否有可能从上下文菜单中控制其他列的可见性(如下图所示)?
<DataGrid x:Name="MyGrid" ItemsSource="{Binding obvCollection}" AutoGenerateColumns="False" >
<DataGridTemplateColumn Header = "Column 1"/>
<DataGridTemplateColumn Header = "Column 2"/>
<DataGridTemplateColumn Header = "Column 3"/>
<DataGridTemplateColumn Header = "Column 4"/>
<DataGridTemplateColumn Header = "Column 5"/>
<DataGridTemplateColumn Header = "Column 6"/>
<DataGridTemplateColumn Header = "Column 7"/>
<DataGridTemplateColumn Header = "Column 8"/>
<DataGridTemplateColumn Header = ""/>
</Datagrid>
解决方案
您可以使用转换器实现此目的:
class VisibilityToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Visibility visibility = (Visibility)value;
return visibility == Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool b = (bool)value;
return b ? Visibility.Visible : Visibility.Hidden;
}
}
...和一些 XAML 标记:
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<Grid Background="Gray" Width="25" Height="25"
Tag="{Binding Columns, ElementName=MyGrid}">
<Grid.ContextMenu>
<ContextMenu ItemsSource="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<CheckBox x:Name="chk">
<CheckBox.IsChecked>
<Binding Path="Visibility">
<Binding.Converter>
<local:VisibilityToBooleanConverter />
</Binding.Converter>
</Binding>
</CheckBox.IsChecked>
<CheckBox.Content>
<TextBlock Text="{Binding Header}" />
</CheckBox.Content>
</CheckBox>
<DataTemplate.Triggers>
<!-- hide the last column in the ContentMenu-->
<DataTrigger Binding="{Binding DisplayIndex}" Value="5">
<Setter TargetName="chk" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</DataGridTemplateColumn.Header>
</DataGridTemplateColumn>
将Grid
示例标记中的 替换为汉堡包按钮或您希望用户单击以调出ContextMenu
.
推荐阅读
- python - python中的时间戳格式
- python - Slack API:rtm.start 有效,但 rtm.connect 在 slack_sdk.rtm_v2 中无效
- python - 如何简化“二十一点”函数以提高效率?简单的语法/函数效率查询
- bash - 我想在 bash 中将变量分配给用逗号分隔的输入
- java - 如何将缓存中存储的数据用于springboot中的另一个功能
- javascript - 将媒体轨道添加到连接后,WebRTC 数据通道连接失败
- purescript - PureScript 上可能类型的案例拆分
- python - 安装cleverhans 3
- python - 将计数函数应用于数据帧会产生不同的结果
- android - 如何使用 Jetpack Compose 动画创建定时 Instagram 故事加载栏?