none
DataForm中包含TabControl控件,FindNameInContent方法无法获取未选中TabItem里的控件 RRS feed

  • 问题

  • 我的DataForm中包含一个TabControl控件,TabControl控件中包含多个TabItem
    每个TabItem中都包含一个DataGrid
    使用DataForm的FindNameInContent方法只能找到TabControl中当前选中TabItem里的控件
    对于未选中TabItem中的控件都无法获取
    这样我对这些控件赋值时必须在每次DataForm中记录的切换和TabControl中TabItem的切换时
    都要去判断当前的TabItem是哪一个,再去调用相应的方法,非常麻烦
    相当于对TabControl的每次切换都要读取一遍数据,大家有没有好的方法解决这个问题?

    2010年2月23日 7:34

答案

  • 你好,
       
          这个问题没有太好的解决办法,tabItem本身是xaml object所以必须加入visual tree才能起作用。 
     
         我见过有人用timer遍历所有的tabitem,来强制初始化。 
         
          不过对你要应对的情况不是和了解,不知道合适不合适
         

    谢谢,我决定用Accordion代替TabControl了
    刚试验过,因为Accordion允许同时显示所有的AccordionItem,所以FindNameInContent方法可以获得所有的控件
    对于折叠起来的AccordionItem中的控件也可以获得
    2010年2月25日 8:20

全部回复

  • 你好,
       
          这个问题没有太好的解决办法,tabItem本身是xaml object所以必须加入visual tree才能起作用。 
     
         我见过有人用timer遍历所有的tabitem,来强制初始化。 
         
          不过对你要应对的情况不是和了解,不知道合适不合适
         
    2010年2月25日 8:02
  • 你好,
       
          这个问题没有太好的解决办法,tabItem本身是xaml object所以必须加入visual tree才能起作用。 
     
         我见过有人用timer遍历所有的tabitem,来强制初始化。 
         
          不过对你要应对的情况不是和了解,不知道合适不合适
         

    谢谢,我决定用Accordion代替TabControl了
    刚试验过,因为Accordion允许同时显示所有的AccordionItem,所以FindNameInContent方法可以获得所有的控件
    对于折叠起来的AccordionItem中的控件也可以获得
    2010年2月25日 8:20
  • 1)经过试验 TabContol 是一个古怪的控件,TabControl Loaded 并没有加载所有的TabItem,只是加载了活动的TabItem。而且切换的时候,又会将Content再Load一下。

    2)不过“对TabControl的每次切换都要读取一遍数据,大家有没有好的方法解决这个问题?”倒是有个解决办法:

    3)我是通过在TabControl的TabItem里面的Content的Loaded事件里面设置一个InitFlag标志变量来解决。见:

    http://tufei.jxagri.gov.cn/TFNjryWeb/里面的TabItem就不会重新读取数据。
    2010年3月1日 3:33