zoukankan      html  css  js  c++  java
  • WPF之GetTemplateChild和FindName方法

    在wpf中,在创建完控件之后,系统开始匹配控件所用的Style或者template。在程序中,可以用GetTemplateChild或者FindName来获得Resource中用x:Name="名字"声明的对象。

      FindName是公共方法,而非受保护方法,它使用恰当的名称范围措施,从而可以访问某个元素中的模板并在其中查找命名项。

      FindName()首先评估该FrameworkElement实例是否包含一个命名范围。如果该实例是一个xaml文件的root,则它包含一个命名范围。然而,如果该实例不包含一个命名空间,该方法则遍历可视树(visual tree),查找最近的命名范围,并解析名称。最近的命名范围可能是template的命名范围,style的命名范围和根节点的命名范围。

      FindName方法不会交叉到其他的命名范围,如果一个template被应用到控件当中,在控件中使用FindName方法就不会获得在Template中以x:Name声明的元素了。

      GetTemplateChild该方法被声明为protected internal,所以必须在使用模板控件内部的代码中访问它。

      个人认为,这两个方法最好都用在OnApplyTemplate函数中,在用户自定义控件中用GetTemplateChild,其他情况用FindName。

      如果找到对应的对象之后,一般是对该对象增加某种事件,或者添加某种效果。但是如果要将该对象赋值给另一个FromeWorkElement时,会出现要求你先断开其与父对象的连接,再复制。这时只需用对象.Parent获得父对象,并将其Child或者items清空即可

  • 相关阅读:
    POJ 3458 Colour Sequence(简单题)
    Cygwin下vim按方向键出现ABCD;
    算法之旅——归并排序
    poj 2769 Reduced ID Numbers(memset使用技巧)
    Restlet+Fastjson 高速构建轻量级 Java RESTful Webservice
    poj 1659 Frogs' Neighborhood (度序列)
    PHP监測memcache服务端的执行状况
    机器学习之倚门回首嗅青梅
    Threejs 官网
    sqlserver安全加固
  • 原文地址:https://www.cnblogs.com/luluping/p/2058020.html
Copyright © 2011-2022 走看看