ContextMenu не появляется при нажатии на «пустое место» в StackPanel - PullRequest
5 голосов
/ 12 сентября 2011

У меня есть HierarchicalDataTemplate, в котором есть несколько простых элементов, содержащихся в горизонтальной панели стека.Контекстное меню также назначено корневому контейнеру StackPanel:

<HierarchicalDataTemplate DataType="{x:Type data:GroupViewModel}"
                              ItemsSource="{Binding Path=Children}">
    <StackPanel Orientation="Horizontal" Margin="2" ContextMenuOpening="groupContextMenuOpening">
        <StackPanel.ContextMenu>
            <StaticResource ResourceKey="groupContextMenu" />
        </StackPanel.ContextMenu>

        <Rectangle Width="16" Height="15" Fill="{Binding Converter={StaticResource HierarchyLevelConverter}}" Margin="0 0 3 0" Cursor="Hand" >
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown" >
                    <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding SetCurrent}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>                
        </Rectangle>
        <Image Width="16" Height="15" Source="{Binding Path=GroupState, Converter={StaticResource GroupStateConverter}}" Cursor="Hand" Margin="0 0 3 0">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown" >
                    <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding ToggleGroupState}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Image>
    </StackPanel>
</HierarchicalDataTemplate>

Хост TreeView также использует ContextMenu.Идея состоит в том, что если вы щелкнете правой кнопкой мыши по элементу в TreeView, вы получите его ContextMenu.Если вы щелкните правой кнопкой мыши в пустом месте в древовидном представлении, вы получите контекстное меню «по умолчанию» с меньшими параметрами.

Это все работает, кроме одной странной проблемы.Как вы можете видеть, горизонтальная StackPanel оставляет поле между изображениями.Если я щелкну правой кнопкой мыши в этом пространстве между элементами, появится контекстное меню TreeView.Я ожидал бы, что ContextMenu, определенный в моем HierarchicalDataTemplate, всплывет, когда я щелкаю правой кнопкой мыши по самой StackPanel.

Я обнаружил, что если я назначу цвет фона для StackPanel, то он тогда работает, но я бы предпочелчтобы избежать этого, если это возможно.

Есть идеи?

1 Ответ

17 голосов
/ 12 сентября 2011

Установите Background для StackPanel на Transparent, чтобы сделать его тестом на попадание в эти пустые области.

...