在Firefox中,双击标签栏的空白区域会创建一个新的标签。我想在WPF TabControl上实现这个功能。
但是如何处理鼠标点击事件呢?
我试着处理了 MouseDoubleClick
的事件,但不幸的是,我得到了相反的结果:点击标签栏的空区域没有任何效果,只有当我点击其他区域时才会生效。
<TabControl MouseDoubleClick="TabControl_DoubleClick">
...
</TabControl>
谢谢。
你需要处理TabItem的事件,而不是TabControl.例如,这对我来说是可行的。
private void tabItem1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
. . .
}
TabControl包含一个 TabPanel
但即使你给它附加了一个鼠标事件(它不是一个控件,所以没有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>