检索托管嵌套WPF控件的TabItem

时间:2015-06-13 23:01:28

标签: c# wpf

我在wpf TabControl上有一些嵌套控件。 我只需要找到特定的TabItem,它是控件的父级。最好使用LINQ。任何想法。

1 个答案:

答案 0 :(得分:0)

未选择的TabItem不存在于Visual树中,但存在于逻辑树中。

我在这方面做了一个小例子:

<TabControl x:Name="TabControl">
     <TabItem Header="Test 1">
            <Button Content="Click to get TabItem Name" Margin="100" Click="btnGetParent_Click"/>
     </TabItem>
     <TabItem Header="Test 2"/>
</TabControl>

单击TabItem内的Button应显示TabItem的标题,这意味着您可以访问它,并且您将能够完成所需的任何工作。

我也在这里保持代码非常简单:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void btnGetParent_Click(object sender, RoutedEventArgs e)
    {
        TabItem ti = TryFindParent<TabItem>(sender as Button);
        MessageBox.Show(ti.Header.ToString());
    }
}

这是辅助方法:

    public T TryFindParent<T>(DependencyObject child)
    where T : DependencyObject
    {
        DependencyObject parentObject = LogicalTreeHelper.GetParent(child);
        if (parentObject == null) return null;

        T parent = parentObject as T;
        if (parent != null)
            return parent;
        else
            return TryFindParent<T>(parentObject);
    }

调用LogicalTreeHelper而不是通常的VisualTreeHelper来完成这项工作。

尝试一下,我希望这会有所帮助。