WPF获取父类控件信息

xtzy89 2020-09-16 04:49:58

点击"APTIV-07"时如何获取"Project_V3"的名称,现在只能获取上一级的名称,无法获得上上级。

XAML格式为:

<DockPanel.Resources>
<local:Data x:Key="MyList"/>

<HierarchicalDataTemplate DataType = "{x:Type local:Data}"
ItemsSource = "{Binding Path= Versions}">

<TextBlock Text="{Binding Path=ProjectName}"/>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType = "{x:Type local:Version}"
ItemsSource = "{Binding Path=Machines}">
<TextBlock Text="{Binding Path=Ver_Name}"/>
</HierarchicalDataTemplate>

<DataTemplate DataType="{x:Type local:Machine}">
<TextBlock Text="{Binding Path=MachineName}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" />
</DataTemplate>
</DockPanel.Resources>

<Menu x:Name="menu" DockPanel.Dock="Top" VerticalAlignment="Top" Visibility="Collapsed"
GotKeyboardFocus="menu_GotKeyboardFocus"
LostKeyboardFocus="menu_LostKeyboardFocus"
ContextMenuOpening="menu_ContextMenuOpening">
<MenuItem Header="Project"
ItemsSource="{Binding Projects}" >
</MenuItem>
</Menu>


获取上级目录用的方法是:

public static T GetParent<T>(DependencyObject obj) where T : FrameworkElement
{
if (obj != null)
{
DependencyObject parent = VisualTreeHelper.GetParent(obj);
while (parent != null)
{
if (parent is T)
{
return (T)parent;
}
parent = VisualTreeHelper.GetParent(parent);
}
}
return null;
}

//获取上级
var parent = GetParent<StackPanel>(e.OriginalSource as DependencyObject);
string currentVersion = ((Version)parent.DataContext).Ver_Name;


有没有大神帮忙看下,如何获取上上级"Project_V3"这个字段,后边显示的时候需要用到。
...全文
12504 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziqi0716 2020-09-17
  • 打赏
  • 举报
回复
wpf是数据驱动UI的,vm不应该尝试去获取界面上的任何控件,而应考虑获取vm中的属性,对相应属性进行访问或者修改,而界面的变化依赖于vm中的属性值变化. 建议先看下mvvm设计模式,理解了就不会有这种复杂的耦合操作了. 如果达到一个目的很难,先考虑下是不是走错路了
第1章(\ch01) 示例描述:介绍Visual Studio 2008的使用。 HelloWorld 第一个C#控制台应用程序 第2章(\ch02) 示例描述:学习C#基本语法实例。 CharString 演示字符和字符串的使用 Enum 演示枚举类型的使用 FuncOverride 演示函数重载的使用 Integer 演示数值类型的使用 UseArray 演示数组定义和使用 UseFuc 演示函数的调用 UseIf 演示If、Switch选择语句使用 UseWhile 演示while、loop、for循环语句使用 第3章(\ch03) 示例描述:学习C#面向对象开发实例。 AnimalPerson 演示C#类的使用 Anonymous 演示匿名类的使用 ClsIndexeer 演示类索引器的使用 ExtMethod 演示扩展方法的使用 Inherit 演示类继承的实例 NewMethod 演示new关键字覆盖父类方法实例 UseClass 演示C#类的使用实例 UseClassProperty 演示类属性(Property)的使用 UseDElegate 演示委托的使用 UseException 演示异常的使用 UseInterface 演示接口的使用 第4章(\ch04) 示例描述:介绍C#中常用集合类的使用。 CreateHashTable 演示创建Hash表实例 AddHashItem 演示添加元素到Hash表实例。 UseHashItem 演示Hash表属性、方法的使用实例 IndexList 演示通过索引访问List列表元素实例 UseList 演示List列表属性、方法的使用实例 FindList 演示在List列表中搜索元素实例 RemoveList 演示删除List列表元素实例 HashProperty 演示Hash表属性的使用实例 RemoveArrayList 演示删除ArrayList元素实例 SearchArrayList 演示在ArrayList中查找元素实例 UseArrayList 演示ArrayList属性、方法的使用实例 CreateDic 演示Dictionary字典的使用实例 第5章(\ch05) 示例描述:学习Windows Form程序和窗体控件的使用。 SimpleForm 第一个窗体应用程序实例 UseButton 演示Button按钮控件的使用实例 UseCheckBox 演示CheckBox复选框控件的使用实例 UseComboBox 演示ComboBox下拉列表控件的使用实例 UseGroupBox 演示GroupBox分组控件的使用实例 UseLabel 演示Label标签控件的使用实例 UseListBox 演示ListBox列表控件的使用实例 UseMaskedTextBox 演示MaskedTextBox格式文本框控件使用实例 UseMenu 演示MenuStrip菜单控件使用实例 UseMonthCaledar 演示MonthCaledar日历控件使用实例 UsePanel 演示Panel面板控件使用实例 UseRadioButton 演示RadioButton单选框控件使用实例 UseStatuStrip 演示StatuStrip状态栏控件使用实例 UseTabControl 演示TabControl分页控件使用实例 UseTextBox 演示TextBox文本框控件使用实例 UseToolStrip 演示ToolStrip工具栏控件使用实例 第6章(\ch06) 示例描述:学习简单窗体应用程序具体开发实例。 SimpleTextEditor 简易文本编辑器实例 第7章(\ch07) 示例描述:学习多文档窗体应用程序具体开发实例。 AdvTextEditor 改进的多文档文本编辑器实例 第8章(\ch08) 示例描述:学习自定义控件的开发和使用。 IntegerTextBox 演示数字文本框自定义控件的开发和使用实例 UseCaculatorUC 演示计算器自定义控件的开发和使用实例

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧