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>