如何捕获RightMouse单击选项卡控件的空白区域?

时间:2015-06-03 00:20:29

标签: c# tabs controls area

我有一个普通的C#标签控件。我想在用户右键单击最右侧选项卡标题右侧的空白区域时(标签标题区域中的任何位置都没有选项卡也可以)执行一个函数。

我看着在空白区域放置一个隐藏按钮,但它没有填充空间,是一种非常硬编码的方法。

我还考虑在空白区域创建一个隐藏的标签,但它也不会完全填满空白空间,所需的标题宽度取决于显示的其他标签数量;此外,用户可能会意外地点击它并离开当前选项卡,这不会很好,因为事情会在标签更改时自动发生。

是否有一种优雅的方式来捕捉空白区域的右键?

1 个答案:

答案 0 :(得分:0)

我最后通过使用如下事件处理程序设置样式来完成它:

<Style x:Key="{dxt:DXTabControlInternalThemeKey ResourceKey=PanelContainerTopLayoutStyle, IsThemeIndependent=True}" TargetType="{x:Type dx:TabPanelContainer}" BasedOn="{StaticResource {dxt:DXTabControlInternalThemeKey ResourceKey=PanelContainerTopLayoutStyle}}">
        <EventSetter Event="PreviewMouseRightButtonDown" Handler="DXTabControl_PreviewMouseRightButtonDown"/>
        <Setter Property="Background" Value="Transparent"/>
    </Style>

然后我查看了事件处理程序,看看是否有这样的父对象:

    private void tabControl_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) {
        DXTabItem parentObject = DevExpress.Xpf.Core.Native.LayoutHelper.FindParentObject<DXTabItem>(e.OriginalSource as DependencyObject);

        // If the click happened over an empty area (i.e., no parent object was found), then toggle the admin button
        if (parentObject == null) {
            if (tabItem_Admin.Visibility == System.Windows.Visibility.Visible)
                tabItem_Admin.Visibility = System.Windows.Visibility.Collapsed;
            else
                tabItem_Admin.Visibility = System.Windows.Visibility.Visible;
        }
    }

此解决方案使用DevExpress库,并且由优秀的DevExpress支持团队提供!