当前位置: 首页 > 编程语言 > C#

如何在可视化树中查找元素?WP7分享

时间:2023-04-10 14:07:39 C#

如何在可视化树中查找元素?WP7如何找到App.xaml中包含的元素,名为“audioPanel”的网格?我试过了:Gridfound=this.FindChild(^*我找不到合适的东西*^,"audioPanel");如何按名称或类型查找WPF控件?UPD:App.xamlhttp://pastebin.com/KfWbjMV8更新:您需要结合我的回答和HB的回答。使用下面的FindChild版本,并将对FindChild的调用更改为vargrid=FindChild(Application.Current.RootVisual,"audioPanel");由于您正在构建手机应用程序框架,因此HB的评论Control中的“应用到它”很可能是RootVisual(可能有例外,我不确定)。另外,我假设您的app.xaml有一个ContentPresenter在pastebin的“...”部分,否则我认为你的风格不会起作用。结束更新如果你在链接的问题中使用了接受的答案(WPF方式来查找控件),并且'audioPanel'网格嵌套在另一个网格中,然后您仍然找不到它-该代码中存在错误。这是一个更新版本,即使用控件也可以使用:publicstaticTFindChild(DependencyObjectparent,stringchildName)whereT:DependencyObject{//ConfirmparentandchildNamearevalid.if(parent==null){返回null;}TfoundChild=null;intchildrenCount=VisualTreeHelper.GetChildrenCount(parent);for(inti=0;i(child,childName);//如果找到孩子,则中断,这样我们就不会覆盖找到的孩子。if(foundChild!=null){break;}}elseif(!string.IsNullOrEmpty(childName)){varframeworkElement=childasFrameworkElement;//如果孩子的名字设置为搜索if(frameworkElement!=null&&frameworkElement.Name==childName){//如果孩子的名字是请求名字foundChild=(T)child;break;}//如果我们想要的元素嵌套在//相同类型的另一个元素中,则需要这个foundChild=FindChild(child,childName);}else{//找到子元素。foundChild=(T)child;break;}}returnfoundChild;}}如果它在App.xaml我假设它是Application.Resources中资源的一部分,因为未在任何地方使用的资源不在可视化树中,这是不可行的。如果是这样,您可以尝试从资源中获取对象的根,然后从那里搜索例如varroot=Application.Current.Resources["MyKey"]作为FrameworkElement;Gridfound=this.FindChild(root,"audioPanel");为了完整起见,EZHart的版本有一个bug,因为childfoundSub被覆盖了。这是一个工作版本以上是C#学习教程:如何在可视化树中查找元素?如果WP7分享的所有内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicstaticTFindChild(thisDependencyObjectparent,stringchildName=null)whereT:DependencyObject{//确认parent和childName有效。如果(父母==null)返回null;TfoundChild=null;varchildrenCount=VisualTreeHelper.GetChildrenCount(parent);for(vari=0;foundChild==null&&i(child,childName);}elseif(!string.IsNullOrEmpty(childName)){varframeworkElement=childasFrameworkElement;//如果孩子的名字设置为搜索if(frameworkElement!=null&&frameworkElement.Name==childName){//如果孩子的名字是请求名称foundChild=(T)child;}else{//如果我们想要的元素嵌套在//中,则需要这个另一个相同类型的元素foundChild=FindChild(child,childName);}}else{//找到子元素foundChild=(T)child;}}returnfoundChild;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: