在Firefox中,双击标签栏的空白区域会创建一个新标签。我想在WPF TabControl上实现此功能。
但是如何处理鼠标点击事件?
我试图处理TabControl的MouseDoubleClick
事件,但不幸的是我得到了相反的结果:单击标签栏的空白区域没有任何效果,只有当我点击其他区域时它才有效。
<TabControl MouseDoubleClick="TabControl_DoubleClick">
...
</TabControl>
感谢。
答案 0 :(得分:0)
你需要处理TabItem而不是TabControl的事件。例如,这对我有用:
private void tabItem1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
. . .
}
答案 1 :(得分:0)
TabControl包含一个TabPanel
,但即使你附加一个鼠标事件(它不是控件,因此没有DoubleClick,但你可以使用MouseUp,例如检查ClickCount)该事件不会在“空旷的空间”开火。
最简单的方法可能是复制默认模板(See MSDN,Default WPF Themes
链接)并在该区域添加一个无形按钮或类似内容。
答案 2 :(得分:0)
为您的“空白空间”提供背景。
在下面的代码中,我将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>