仅针对TabItem的选项卡

本文关键字:选项 TabItem | 更新日期: 2023-09-27 18:15:45

问题:

我正在创建一个拖放界面,允许移动选项卡内的项目,以及从一个选项卡到另一个选项卡。现在我有下面的Style,它允许我在TabItem中瞄准Label。由于与ResourceDictionary冲突,我想通过后面的代码添加Event。问题是,如果我将Event添加到TabItem,那么它不仅会触发标签本身,还会触发标签的内容。

问题:

我将如何在后面的代码中为下面的事件进行连接?

<Style
    x:Key="DragDropTi"
    BasedOn="{StaticResource {x:Type TabItem}}"
    TargetType="TabItem"> 
    <Setter
        Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <Label
                    Foreground="White"
                    Content="{Binding}">
                    <Label.Style>
                        <Style
                            TargetType="Label">
                            <EventSetter
                                Event="Drop"
                                Handler="TabItemDrop" />
                            <Setter
                                Property="AllowDrop"
                                Value="True" />
                        </Style>
                    </Label.Style>
                </Label>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

仅针对TabItem的选项卡

最终的答案比预期的要简单。我只需要将MenuItem.Header设置为Label而不是名称字符串,并将Event附加到Label

Label header = new Label();
header.Content = "Tab Name";
header.AllowDrop = true;
header.Drop += new DragEventHandler(TabItemDrop);
TabItem tabItem = new TabItem();
tabItem.Header = header;