我在wpf TabControl上有一些嵌套控件。 我只需要找到特定的TabItem,它是控件的父级。最好使用LINQ。任何想法。
答案 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来完成这项工作。
尝试一下,我希望这会有所帮助。