【问题标题】:Setting IsCheckable seems to prevent submenus from showing up设置 IsCheckable 似乎可以防止子菜单出现
【发布时间】:2009-02-19 04:30:10
【问题描述】:

我正在尝试将 IsChecked 绑定到我正在显示的对象上的 Selected DependancyProperty,此代码似乎可以工作,但如果我使用它,子菜单不会显示。这是解决问题的正确方法吗?我该如何解决这个问题?

<MenuItem Header="Window" Name="windowMenu" ItemsSource="{Binding}">
    <MenuItem.ItemContainerStyle>
        <Style>
             <Setter Property="MenuItem.IsChecked" Value="{Binding Path=Selected}" />
             <Setter Property="MenuItem.IsCheckable" Value="true" />
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>

【问题讨论】:

    标签: wpf data-binding xaml


    【解决方案1】:

    快速测试表明,如果 MenuItem 的 IsCheckable 属性设置为 True,它将不会显示其子项。

        <Menu>
            <MenuItem Header="File">
                <MenuItem Header="Exit" />
            </MenuItem>
            <MenuItem Header="Tools">
                <MenuItem Header="Options" IsCheckable="True">
                    <MenuItem Header="one" IsCheckable="True" />
                    <MenuItem Header="two" IsCheckable="True" />
                </MenuItem>
            </MenuItem>
        </Menu>
    

    在上面的示例中,Options 不会显示任何子项。

    编辑:出现这种情况的原因是,从用户体验的角度来看,这并不是一个真正有意义的情况。我能想到的唯一情况是检查一个检查其所有子项目的项目,但我想你最好使用复选框。

    重新定义 ControlTemplate 无疑是一种选择。 Blend通常可以告诉你它的默认控件模板是什么,你可以从那里开始。

    【讨论】:

    • 那么有什么好的解决方法呢?我假设我可以重新定义控件模板,但我不确定默认模板是什么,我不想失去它的任何功能。
    • 如果你有 Blend,你可以编辑现有控制模板的副本,它会吐出完整的默认模板定义。否则,您将不得不在 WPF 库中四处寻找它。
    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 2015-02-16
    • 2018-04-04
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多