WPF: определить, находится ли курсор мыши в элементе управления (не обязательно непосредственно над ним)

#wpf #tabcontrol

#wpf #tabcontrol

Вопрос:

У меня есть элемент управления вкладкой, где щелчок правой кнопкой мыши по элементу вкладки показывает контекстное меню. При нажатии на пункт меню под названием «Закрыть» я хочу закрыть элемент вкладки, на который пользователь щелкнул правой кнопкой мыши.

Вот проблема. Если у меня есть TabItem1 и tabItem2 и выбран TabItem1. Затем щелкните правой кнопкой мыши на tabItem2 и нажмите «закрыть». На данный момент TabItem1 по-прежнему является выбранным элементом, но я хочу закрыть tabItem2, и я не знаю, как получить tabItem2.

Если я могу получить, находится ли курсор в элементе управления (а не непосредственно над b / c, он находится непосредственно над текстовым блоком, который я добавил в заголовок элемента вкладки) Я смог бы найти элемент управления и удалить его из Tabcontrol.Товары

Будем признательны за любую помощь.

Спасибо

Комментарии:

1. Похоже, вы хотите знать, на какой вкладке вы щелкнули правой кнопкой мыши, а не на какой из них находится мышь при выборе «Закрыть» (тем более, что мышь может больше не находиться над любой из вкладок при нажатии «Закрыть»).

Ответ №1:

Используйте событие ContextMenuOpening, чтобы определить, с какой вкладки было открыто контекстное меню, тогда нет необходимости беспокоиться о мыши:

 <TabControl TabItem.ContextMenuOpening="ContextMenu_ContextMenuOpening">
    <TabControl.Resources>
        <ContextMenu x:Key="context_menu"  >
            <MenuItem Header="Option 1" />
            <MenuItem Header="Option 2" />
        </ContextMenu>
    </TabControl.Resources>

    <TabItem x:Name="tab1" Header="Tab 1" Content="This is Tab 1" ContextMenu="{StaticResource context_menu}" />
    <TabItem x:Name="tab2" Header="Tab 2" Content="This is Tab 2" ContextMenu="{StaticResource context_menu}" />
</TabControl>
  

И обработчик событий:

 private void ContextMenu_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
    //get the tab item:
    TabItem bob = e.Source as TabItem;
}