C# 在tabitem标题内的按钮单击事件期间发送Tab

C# 在tabitem标题内的按钮单击事件期间发送Tab,c#,wpf,xaml,C#,Wpf,Xaml,我试图在单击tabitem标题内的按钮(TabCloseButton)时删除该选项卡。但我作为父母也拿不到账单。有人能帮我找到如何将选项卡传递给click方法吗。任何代码示例都会有所帮助 <TabControl Name="ConnectionsTab" BorderThickness="0" Background="White"> <TabControl.Resources> <Style TargetT

我试图在单击tabitem标题内的按钮(TabCloseButton)时删除该选项卡。但我作为父母也拿不到账单。有人能帮我找到如何将选项卡传递给click方法吗。任何代码示例都会有所帮助

<TabControl Name="ConnectionsTab" BorderThickness="0" Background="White">
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
 <Setter.Value>
 <ControlTemplate TargetType="{x:Type TabItem}">
 <Grid Background="White">
 <Border Name="Border" BorderBrush="#1b9ed2" Margin="6,0,12,0" Background="White">
 <ContentPresenter Height="30" x:Name="ContentSite" ContentSource="Header" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="5,15,5,-5">
 </ContentPresenter>
 </Border>
 <Button Background="Wheat" BorderBrush="Transparent" Name="TabCloseButton" Click="TabCloseButton_Click" HorizontalAlignment="Right" VerticalAlignment="Bottom" ToolTip="Close" HorizontalContentAlignment="Right" Padding="0">
 <materialDesign:PackIcon Kind="Close" Foreground="Gray" HorizontalAlignment="Right"/>
 </Button>
 </Grid>
 <ControlTemplate.Triggers>
 ...............
 </ControlTemplate>
 </Setter.Value>
 </Setter>
 <Setter Property="FontSize" Value="12"/>
 </Style>
 </TabControl.Resources>
 <TabItem Header="Connections" IsSelected="True" TabIndex="0">
 <TabItem.Content>
 <Grid>
 <TextBlock Name="errorMessage" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Gray" Visibility="Hidden"></TextBlock>
 <Grid Name="MainConnectionTab"/>
 </Grid>
 </TabItem.Content>
 </TabItem>
 <TabItem Header="machine1"></TabItem>
 <TabItem Header="machine2"></TabItem>
 </TabControl>

...............

您可以使用一个助手方法,该方法使用
VisualTreeHelper
在可视化树中查找父级
选项卡项

private void TabCloseButton_Click(object sender, RoutedEventArgs e)
{
    Button tabCloseButton = (Button)sender;
    TabItem parentTab = FindParent<TabItem>(tabCloseButton);
    if (parentTab != null)
        ConnectionsTab.Items.Remove(parentTab);

}

private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
    DependencyObject parent = VisualTreeHelper.GetParent(dependencyObject);
    if (parent == null)
        return null;

    T parentT = parent as T;
    return parentT ?? FindParent<T>(parent);
}
private void TabCloseButton\单击(对象发送者,路由目标)
{
按钮选项卡CloseButton=(按钮)发送器;
TabItem parentTab=FindParent(tabCloseButton);
if(parentTab!=null)
ConnectionsTab.Items.Remove(父选项卡);
}
私有静态T FindParent(DependencyObject DependencyObject),其中T:DependencyObject
{
DependencyObject parent=VisualTreeHelper.GetParent(DependencyObject);
如果(父项==null)
返回null;
T parentT=作为T的父项;
返回父母??找到父母(父母);
}