Дочерние элементы меню не расширяются - PullRequest
0 голосов
/ 14 мая 2019

У меня есть простой всплывающий элемент управления, содержащий несколько 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 с заголовком Test, который содержит вложенные дочерние элементы, не расширяется при наведении мыши.

Я действительно могу видеть, как он расширяется во время разработки

enter image description here

Однако, когда он просто не работает во время выполнения.

Есть идеи, почему это так?

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Вы можете использовать Style с Trigger, который устанавливает для свойства IsSubmenuOpen значение true:

<Popup IsOpen="True">
    <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.Style>
                    <Style TargetType="MenuItem">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="IsSubmenuOpen" Value="True" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </MenuItem.Style>
            </MenuItem>

            <MenuItem Header="Exit" />
        </ItemsControl>
    </StackPanel>
</Popup>
0 голосов
/ 14 мая 2019

Похоже, проблема в том, что элемент управления 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 есть подэлементы, событие click не вызывается, и необходимо вручную обработать состояние подменю, если корневой элемент меню не является «дочерним» для элемента управления Menu или ContextMenu.Эти элементы управления уже обрабатывают это, но, поскольку вы реализуете свое собственное «ContextMenu», вы должны реализовать это поведение самостоятельно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...