C# 检索承载嵌套WPF控件的选项卡项
我在wpf选项卡控件上有一些嵌套控件。C# 检索承载嵌套WPF控件的选项卡项,c#,wpf,C#,Wpf,我在wpf选项卡控件上有一些嵌套控件。 我只需要找到特定的TabItem,它是控件的父项。最好使用LINQ。任何想法。未选择的选项卡项不存在于可视树中,而是存在于逻辑树中 我举了一个小例子: <TabControl x:Name="TabControl"> <TabItem Header="Test 1"> <Button Content="Click to get TabItem Name" Margin="100" Click=
我只需要找到特定的TabItem,它是控件的父项。最好使用LINQ。任何想法。未选择的选项卡项不存在于可视树中,而是存在于逻辑树中 我举了一个小例子:
<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内的按钮将显示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());
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效btnGetParent\u单击(对象发送者,路由目标e)
{
TabItem ti=TryFindParent(发送者为按钮);
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);
}
public T TryFindParent(DependencyObject子对象)
其中T:DependencyObject
{
DependencyObject parentObject=LogicalTreeHelper.GetParent(子级);
if(parentObject==null)返回null;
T parent=parentObject作为T;
如果(父项!=null)
返回父母;
其他的
返回TryFindParent(parentObject);
}
这里的工作是调用LogicalTreeHelper而不是通常的VisualTreeHelper
试试看,我希望这能有所帮助