子菜单项未展开

时间:2019-05-14 13:09:05

标签: c# wpf xaml popup controls

我有一个简单的弹出控件,其中包含多个MenuItem

<Popup
    IsOpen="{Binding ShowPopupMenu}"
    <StackPanel Background="White">
        <ItemsControl>
            <MenuItem Header="Open file..." />
            <MenuItem Header="Settings" />

            <!-- Nested items -->
            <MenuItem Header="Test">
                <MenuItem Header="Nested Item" />
                <MenuItem Header="Nested Item" />
                <MenuItem Header="Nested Item" />
                <MenuItem Header="Nested Item" />
                <MenuItem Header="Nested Item" />
            </MenuItem>

            <MenuItem Header="Exit" />
        </ItemsControl>
    </StackPanel>
</Popup>

我的问题是,标题为MenuItem的{​​{1}}包含嵌套的子项,鼠标悬停时无法展开。

我实际上可以看到它在设计时不断扩展

enter image description here

但是,当它根本无法在运行时上运行时。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

问题似乎出在Popup控件处理鼠标单击事件,因此,它没有到达菜单项,请尝试通过处理PreviewLeftButton事件来手动打开它:

<StackPanel x:Name="Panel">
    <Popup PlacementTarget="{Binding ElementName=Panel}" 
        IsOpen="True">
        <StackPanel Background="White">
            <!--<Menu>-->
                <MenuItem Header="Open file..." />
                <MenuItem Header="Settings" />

                <!-- Nested items -->
                <MenuItem Header="Test" Click="MenuItem_OnClick" PreviewMouseLeftButtonDown="UIElement_OnPreviewMouseLeftButtonDown">
                    <MenuItem Header="Nested Item" />
                    <MenuItem Header="Nested Item" />
                    <MenuItem Header="Nested Item" />
                    <MenuItem Header="Nested Item" />
                    <MenuItem Header="Nested Item" />
                </MenuItem>

                <MenuItem Header="Exit" />
            <!--</Menu>-->
        </StackPanel>
    </Popup>
</StackPanel>

并且:

private void UIElement_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    ((MenuItem)sender).IsSubmenuOpen = true;
}

编辑

我的错误,问题与未处理Click事件无关。我只是在堆栈面板上放了一个按钮就可以了。问题在于,当MenuItem具有子项时,如果根菜单项不是MenuContextMenu的“子级”,则不会触发click事件,并且必须手动处理子菜单的状态。控制。这些控件已经处理了,但是由于您正在实现自己的“ ContextMenu”,因此您必须自己实现该行为

答案 1 :(得分:0)

您可以将window.dataLayer = window.dataLayer || []; event: 'eec.purchase' 一起使用,以将Style属性设置为Trigger

IsSubmenuOpen