Закрытие ContextMenu при нажатии на внутренний элемент управления - PullRequest
0 голосов
/ 26 февраля 2011

У меня есть текстовое поле с ContextMenu, меню содержит вкладку управления. Проблема, с которой я сталкиваюсь, заключается в том, что когда я щелкаю по любому из элементов управления вкладками, чтобы изменить видимый элемент управления вкладками, контекстное меню закрывается. Есть идеи?

Я пробовал событие ContextMenu_ContextMenuClosing, но оно, похоже, не перехватывает событие

<TextBox x:Name="TestCB4" TextSearch.TextPath="Name" >
    <TextBox.ContextMenu>
        <ContextMenu ContextMenuOpening="ContextMenu_ContextMenuOpening" 
                     ContextMenuClosing="ContextMenu_ContextMenuClosing"
                     MouseLeftButtonDown="ContextMenu_MouseLeftButtonDown"
                     StaysOpen="True"
                     Background="Transparent" Margin="0">
            <TabControl ContextMenuClosing="TabControl_ContextMenuClosing" Margin="0">
                <TabItem Header="User Space">
                    <WrapPanel Orientation="Horizontal"
                               HorizontalAlignment="Right"
                               Margin="10,2,2,2">
                        <Button Content="_Select" Margin="1"
                                Command="{Binding Path=SelectVendorCommand}" 
                                CommandParameter="{Binding ElementName=ucFindVendorCtrl, Path=VendorListView.SelectedItems}" />
                        <Button Content="_Add To User Space" Margin="1"
                                Command="{Binding Path=AddVendorToUserSpaceCommand}"
                                Width="120"
                                CommandParameter="{Binding ElementName=ucFindVendorCtrl, Path=VendorListView.SelectedItems}" />
                    </WrapPanel>
                </TabItem>
                <TabItem Header="Find">
                    <WrapPanel Orientation="Horizontal"
                               HorizontalAlignment="Right"
                               Margin="10,2,2,2">
                        <Button Content="_Select" Margin="1"
                                Command="{Binding Path=SelectVendorCommand}" 
                                CommandParameter="{Binding ElementName=ucFindVendorCtrl, Path=VendorListView.SelectedItems}" />
                        <Button Content="_Add To User Space" Margin="1"
                                Command="{Binding Path=AddVendorToUserSpaceCommand}"
                                Width="120"
                                CommandParameter="{Binding ElementName=ucFindVendorCtrl, Path=VendorListView.SelectedItems}" />
                    </WrapPanel>
                </TabItem>
            </TabControl>
        </ContextMenu>
    </TextBox.ContextMenu>
</TextBox>

Ответы [ 2 ]

1 голос
/ 28 января 2014

попробуйте поместить ваш tabcontrol в элемент меню, как в примере:

<ContextMenu>
<MenuItem StaysOpenOnClick="true">
<MenuItem.Header>
...your TabControl
</MenuItem.Header>
</MenuItem>
</ContextMenu>

Я надеюсь, что это может быть полезно.

1 голос
/ 26 февраля 2011

Я думаю, что проблема в том, что TabControl не обрабатывает распространение перенаправленных событий MouseLeftButtonDown, поэтому ContextMenu перехватывает его и закрывает.

Если это так, то решение довольно простое. Просто оберните TabControl в ContentControl и перехватите событие MouseLeftButtonDown в ContentControl. В обработчике событий сделайте e.Handled = true; Таким образом, ContextMenu не сможет узнать, что пользователь нажал на TabControl.

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