WPF 禁用 DatagridRow 和 ContextMenu
WPF Disabled DatagridRow and ContextMenu
我有一个绑定到自定义对象集合的数据网格。
此数据网格允许用户在右键单击一行时访问上下文菜单。我通过 TextBlock 样式来做到这一点:
<Style x:Key="DatagridTextblockStyle"
TargetType="{x:Type TextBlock}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="First action" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
如果自定义对象的 "IsActive" 布尔值 属性 为假,它还会显示可能被禁用的行。
我通过 DataGrid.RowStyle:
<DataGrid ItemsSource="{Binding MyCustomObjects}">
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsActive}"
Value="True">
<Setter Property="IsEnabled"
Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
这很好用。
然而,问题是当一行被禁用时,上下文菜单不再可用。
我找不到解决方法。
有什么想法吗?
将 ContextMenuService.ShowOnDisabled
附加 属性 设置为 ElementStyle
中的 true
:
<Style x:Key="DatagridTextblockStyle" TargetType="{x:Type TextBlock}">
<Setter Property="ContextMenuService.ShowOnDisabled" Value="True" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="First action" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
我有一个绑定到自定义对象集合的数据网格。
此数据网格允许用户在右键单击一行时访问上下文菜单。我通过 TextBlock 样式来做到这一点:
<Style x:Key="DatagridTextblockStyle"
TargetType="{x:Type TextBlock}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="First action" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
如果自定义对象的 "IsActive" 布尔值 属性 为假,它还会显示可能被禁用的行。
我通过 DataGrid.RowStyle:
<DataGrid ItemsSource="{Binding MyCustomObjects}">
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsActive}"
Value="True">
<Setter Property="IsEnabled"
Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
这很好用。 然而,问题是当一行被禁用时,上下文菜单不再可用。
我找不到解决方法。
有什么想法吗?
将 ContextMenuService.ShowOnDisabled
附加 属性 设置为 ElementStyle
中的 true
:
<Style x:Key="DatagridTextblockStyle" TargetType="{x:Type TextBlock}">
<Setter Property="ContextMenuService.ShowOnDisabled" Value="True" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="First action" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>