我知道有一种方法可以阻止或现在通过使用ContextMenuOpening事件显示上下文菜单.
但我仍然想显示上下文菜单,只是禁用其中的所有内容,有没有办法做到这一点?
如何同时禁用所有菜单项?
<DataTemplate x:Key="ItemDataTemplate">
<Grid Background="Transparent">
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="New" Click="New_Click" />
<Separator />
<MenuItem Header="Duplicate" Click="Duplicate_Click"/>
<MenuItem Header="Delete" Click="Delete_Click" />
<MenuItem Header="Rename" Click="Rename_Click" />
<Separator />
<MenuItem Header="Export..." Click="Export_Click" />
<MenuItem Header="Print..." Command="ApplicationCommands.Print" InputGestureText="" />
<Separator />
<MenuItem Header="Properties" Click="Properties_Click" />
</ContextMenu>
</Grid.ContextMenu>
<StackPanel Orientation="Horizontal"
Margin="0,0,10,0"
HorizontalAlignment="Stretch"
Background="Transparent"
IsHitTestVisible="False">
</StackPanel>
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
IsEnabled = false在ContextMenu?
编辑:由于在执行此操作时似乎存在关闭问题,我建议使用容器样式:
<ContextMenu>
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="IsEnabled" Value="False"/>
</Style>
</ContextMenu.ItemContainerStyle>
<MenuItem Header="Test"/>
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)
当然,实际值也可以绑定,但在容器样式中,上下文是单个项,因此要绑定到父上下文,RelativeSource必须绑定(除非数据对象也与父项建立连接).
小智 5
<Style x:Key="z3r0_Style_TextBox_Default" BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
<Setter Property="FontSize" Value="11"/>
<Setter Property="Background" Value="{StaticResource z3r0_SolidColorBrush_DarkerGray}"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
<Setter Property="FontFamily" Value="Consolas"/>
<Setter Property="Foreground" Value="{StaticResource z3r0_SolidColorBrush_Green}"/>
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="MinWidth" Value="10"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu IsEnabled="False" Visibility="Hidden">
</ContextMenu>
</Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)
对我来说,将IsEnabled设置为False仍然会导致一个小的空白上下文菜单可见。更改其可见性属性后,它实际上已被禁用。
这是我解决问题的方法。
还是用ContextMenuOpening事件吧。使用循环。
这为什么可以帮助我禁用代码中的某些上下文菜单项,但不能在XAML.
private void SetContextMenuItemsEnableStatus(object sender)
{
FrameworkElement element = sender as FrameworkElement;
if (element == null)
{
return;
}
ContextMenu contextMenu = element.ContextMenu;
if (contextMenu == null)
return;
//Use this way.
//You can disable every item or certain item in context menu.
foreach (Control item in contextMenu.Items)
{
item.IsEnabled = false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12711 次 |
| 最近记录: |