仅在选项卡控件上显示上下文菜单

发布于 2024-11-02 13:42:58 字数 102 浏览 0 评论 0原文

我正在尝试添加一个上下文菜单,其中包含“关闭”和“关闭除此之外的所有内容”,就像在 IE8 中一样。 当我单击选项卡而不是 tabitem 时,应该显示此菜单。

我该怎么做?

I am trying to add a context menu that has "Close" and "Close all but this" like in IE8.
This menu should be displayed when I click on the tab but not on tabitem.

How can i do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁月打碎记忆 2024-11-09 13:42:58

我相信您希望仅当用户单击 TabItem 的标题而不是 TabControl 的内容区域时才显示 ContextMenu。

如果是这样,您可以为 Header 定义一个模板。请参阅下面的示例代码。

笔记:

- 仅当您单击 TabItem 标题的文本部分(而不是其余空白区域)时,才会出现上下文菜单。如果您想要整个选项卡标题区域,则需要修改 TabItem 的 ControlTemplate。

示例代码:

<Window x:Class="WpfApplication4.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <DataTemplate x:Key="tabHeaderTemplate">
            <ContentPresenter Width="Auto" Content="{TemplateBinding Content}">
                <ContentPresenter.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Close Tab" />
                        <MenuItem Header="Close Other Tabs" />
                        <Separator />
                        <MenuItem Header="New Tab" />
                    </ContextMenu>
                </ContentPresenter.ContextMenu>
            </ContentPresenter>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <TabControl>
            <TabItem Header="Tab 1"
                     HeaderTemplate="{StaticResource tabHeaderTemplate}">
                    <Label>Data for first Tab goes here</Label>
            </TabItem>
            <TabItem Header="Tab 2"
                     HeaderTemplate="{StaticResource tabHeaderTemplate}">
                <Label>Data for second Tab goes here</Label>
            </TabItem>
            <TabItem Header="Tab 3">
                <Label>Data for third Tab goes here</Label>
            </TabItem>
        </TabControl>
    </Grid>
</Window>

I believe you want the ContextMenu to appear only when user clicks on the Header of TabItem and not the content area of the TabControl.

If so, you can define a template for Header. See sample code below.

Note:


- The Context menu will appear only when you click on the text part (and not rest of the blank area) of the TabItem Header. If you want for the whole Tab Header area, you will need to modify the ControlTemplate for TabItem.

Sample Code:

<Window x:Class="WpfApplication4.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <DataTemplate x:Key="tabHeaderTemplate">
            <ContentPresenter Width="Auto" Content="{TemplateBinding Content}">
                <ContentPresenter.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Close Tab" />
                        <MenuItem Header="Close Other Tabs" />
                        <Separator />
                        <MenuItem Header="New Tab" />
                    </ContextMenu>
                </ContentPresenter.ContextMenu>
            </ContentPresenter>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <TabControl>
            <TabItem Header="Tab 1"
                     HeaderTemplate="{StaticResource tabHeaderTemplate}">
                    <Label>Data for first Tab goes here</Label>
            </TabItem>
            <TabItem Header="Tab 2"
                     HeaderTemplate="{StaticResource tabHeaderTemplate}">
                <Label>Data for second Tab goes here</Label>
            </TabItem>
            <TabItem Header="Tab 3">
                <Label>Data for third Tab goes here</Label>
            </TabItem>
        </TabControl>
    </Grid>
</Window>
那些过往 2024-11-09 13:42:58

这是您需要的吗:
TabContextMenu

代码:

 <TabControl Margin="28,25,57,38" Name="tabControl1">
        <TabItem Header="tabItem1" Name="tabItem1">
            <TabItem.ContextMenu>
                <ContextMenu Name="ct1" >
                    <MenuItem Name="Item1" Header="Close"/>
                    <MenuItem Name="Item2" Header="CloseOtherThankThis" />
                </ContextMenu>
            </TabItem.ContextMenu>
            <Grid>
                <Label Margin="41,75,22,64" Name="label1">First Tab</Label>
            </Grid>
        </TabItem>
        <TabItem Header="tabItem2" Name="tabItem2">
            <TabItem.ContextMenu>
                <ContextMenu Name="ct2">
                        <MenuItem Name="Item3" Header="Close"/>
                        <MenuItem Name="Item4" Header="CloseOtherThankThis" />
                </ContextMenu>
            </TabItem.ContextMenu>
                 </TabItem>
    </TabControl>

您是在谈论不应该有重复的上下文菜单的情况吗?

Is this what you need:
TabContextMenu

Code:

 <TabControl Margin="28,25,57,38" Name="tabControl1">
        <TabItem Header="tabItem1" Name="tabItem1">
            <TabItem.ContextMenu>
                <ContextMenu Name="ct1" >
                    <MenuItem Name="Item1" Header="Close"/>
                    <MenuItem Name="Item2" Header="CloseOtherThankThis" />
                </ContextMenu>
            </TabItem.ContextMenu>
            <Grid>
                <Label Margin="41,75,22,64" Name="label1">First Tab</Label>
            </Grid>
        </TabItem>
        <TabItem Header="tabItem2" Name="tabItem2">
            <TabItem.ContextMenu>
                <ContextMenu Name="ct2">
                        <MenuItem Name="Item3" Header="Close"/>
                        <MenuItem Name="Item4" Header="CloseOtherThankThis" />
                </ContextMenu>
            </TabItem.ContextMenu>
                 </TabItem>
    </TabControl>

Are you talking about the case in which there should be no duplicate context menu?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文