wpf - 动态隐藏菜单项

标签 wpf xaml menu

我有一个用 xaml 构建的菜单,MenuItem 的属性 ItemTemplate 设置为以下模板:

<HierarchicalDataTemplate x:Key="MenuItemTemplate" DataType="{x:Type mainMenu:MenuItem}" ItemsSource="{Binding ChildMenuItems}">
     <MenuItem Command="{Binding Command}" CommandParameter="{Binding CommandParameter}" Header="{Binding Path=Header}" Visibility="{Binding Visible, Converter={converter:BooleanToVisibilityConverter}}" />
</HierarchicalDataTemplate>

当我将属性 Visible 的值更改为 false 以隐藏子菜单时,结果是这样的:

enter image description here

子菜单是隐藏的,但它们仍然需要一些空间。如何更改它以适应菜单中剩余的项目数量?

编辑:

这是转换器的代码:
public class BooleanToVisibilityConverter : MarkupExtension, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (bool) value ? Visibility.Visible : Visibility.Collapsed;
    }
}

最佳答案

我怀疑你回来了 Visibility.Hidden从你的转换器。而是返回 Visibility.Collapsed .

来自 MSDN :

enter image description here

此外WPF提供BooleanToVisibilityConverter ,除非做一些额外的事情,否则您不需要重新定义它。您可以像这样在 App 资源部分下添加资源并使用:

<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>

关于wpf - 动态隐藏菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22362729/

相关文章:

C# 应用程序 - 如何在 xaml 表单中显示网站?

wpf - WPF中的自定义UserControl/ ListView 控件

c# - WPF 从用户控制 MVVM 更改 View

javascript - 固定导航栏时隐藏绝对定位的 div

html - 将半径 Angular 应用到菜单的末尾而不是每个元素

wordpress - 如何在登录时动态更改 WordPress 主菜单?

c# - WPF:选中/取消选中位于 gridview 单元格模板中的复选框的所有复选框?

c# - 如何在 wpf 中使两个段落 block 在同一级别上,在级别上,保持一个 block 左对齐,另一个右对齐?

wpf - 为什么从 WPF 更改为 Silverlight 4?

c# - 在单独的线程上显示 WPF -"NotifyIcon"