WPF TabControl:鼠标单击事件(空白区域)标签栏

时间:2011-05-27 09:04:09

标签: wpf events mvvm event-handling tabcontrol

在Firefox中,双击标签栏的空白区域会创建一个新标签。我想在WPF TabControl上实现此功能。

但是如何处理鼠标点击事件?

我试图处理TabControl的MouseDoubleClick事件,但不幸的是我得到了相反的结果:单击标签栏的空白区域没有任何效果,只有当我点击其他区域时它才有效。

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

感谢。

3 个答案:

答案 0 :(得分:0)

你需要处理TabItem而不是TabControl的事件。例如,这对我有用:

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

答案 1 :(得分:0)

TabControl包含一个TabPanel,但即使你附加一个鼠标事件(它不是控件,因此没有DoubleClick,但你可以使用MouseUp,例如检查ClickCount)该事件不会在“空旷的空间”开火。

最简单的方法可能是复制默认模板(See MSDNDefault 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>