haa*_*gel 11 wpf contextmenu mvvm
我有一个上下文菜单,通过数据绑定获取菜单项(我使用的是MVVM模式):
<ContextMenu ItemsSource="{Binding Path=ContextMenuItems}" />
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,在没有要显示的菜单项的情况下,我不希望上下文菜单显示.有没有办法实现这个目标?某种XAML触发可能吗?
当没有孩子时,我已经尝试捕获Opened事件,关闭上下文菜单.这工作但上下文菜单仍然闪烁...
pba*_*aga 25
您可以定义隐式样式:
<Style TargetType="{x:Type ContextMenu}">
<Style.Triggers>
<Trigger Property="HasItems" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
这应该适用于所有上下文菜单.
Tho*_*son 16
也许绑定到菜单项集合计数属性并使用转换器设置上下文菜单的可见性.
<ContextMenu ItemsSource="{Binding Path=ContextMenuItems}"
Visibility="{Binding Path=ContextMenuItems.Count,Converter={StaticResource zeroToHiddenConverter}}">
Run Code Online (Sandbox Code Playgroud)
public class ZeroToHiddenConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int count = (int) value;
if (count == 0)
{
return Visibility.Hidden;
}
else
{
return Visibility.Visible;
}
}
Run Code Online (Sandbox Code Playgroud)