WPF TabControl: событие щелчка мыши на (пустой области) панели вкладок

В Firefox двойной щелчок по пустой области панели вкладок создает новую вкладку. Я хочу реализовать эту функцию в WPF TabControl.

Но как обработать событие щелчка мышью?

Я пытался справиться с MouseDoubleClick Событие TabControl, но, к сожалению, я получил противоположный результат: нажатие на пустую область панели вкладок не имеет никакого эффекта, оно работает только тогда, когда я нажимаю на другие области.

    <TabControl MouseDoubleClick="TabControl_DoubleClick">
        ...
    </TabControl>

Благодарю.

2 ответа

Вам нужно обработать событие для TabItem, а не TabControl. Например, это сработало для меня:

private void tabItem1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
           . . .
        }

TabControl содержит TabPanel, но даже если вы прикрепите к нему событие Mouse (это не элемент управления, поэтому DoubleClick отсутствует, но вы можете использовать MouseUp и проверить ClickCount, например), это событие не будет запускаться в "пустом пространстве".

Тогда самый простой способ сделать это - скопировать шаблон по умолчанию ( см. MSDN, Default WPF Themes ссылка) и добавьте в эту область кнопку без вида или что-то подобное.

Дайте своему "пустому месту" фон.

В приведенном ниже коде я установил TabItem шаблон управления в StackPanelчей фон не определен. ЕслиStackPanel имеет заданный фон, даже Transparent, вы можете нажать на пустое место.

Однако, если вы установите фон на StackPanelсам элемент, он будет использовать этот фон для выбранного элемента вкладки, а также для невыбранных элементов, что, вероятно, не то, что вы хотите (поскольку фон обычно является основным способом показать, какой элемент выбран). Итак, вам нужно установить триггер для фона дляIsSelected=False.

<ControlTemplate TargetType="TabItem">

    <Border BorderBrush="Black" BorderThickness="{TemplateBinding BorderThickness}">
        <StackPanel Name="Panel">
            <Ellipse Margin="0 20 0 10" Height="30" Width="30" Fill="Gray"/>
            <Label Name="Header" Content="{TemplateBinding Header}" HorizontalAlignment="Center" FontWeight="Bold"/>
        </StackPanel>
    </Border>

    <ControlTemplate.Triggers>
        <Trigger Property="IsSelected" Value="False">
            <Setter TargetName="Panel" Property="Background" Value="White"/>
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter TargetName="Panel" Property="Background" Value="Blue"/>
            <Setter TargetName="Header" Property="Foreground" Value="Transparent"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>
Другие вопросы по тегам