WPF Tab控件。鼠标点击事件(空区域)标签栏

问题描述 投票:1回答:3

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

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

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

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

谢谢。

wpf events mvvm event-handling tabcontrol
3个回答
0
投票

你需要处理TabItem的事件,而不是TabControl.例如,这对我来说是可行的。

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

0
投票

TabControl包含一个 TabPanel但即使你给它附加了一个鼠标事件(它不是一个控件,所以没有DoubleClick,但你可以使用MouseUp并检查ClickCount),该事件也不会在 "空的空间 "中发生。

最简单的方法是复制默认模板 (参见MSDN, Default WPF Themes 链接),并在该区域添加一个无表情的按钮或类似的东西。


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>
© www.soinside.com 2019 - 2024. All rights reserved.