2013-07-23 39 views
1

在我的Windows 8应用里面,我试图改变FlipView的一个DataTemplate中TextBlock的文字...访问控件FlipView联合国XAML

我FlipView的DataTemplate(简体...):

 <FlipView.ItemTemplate> 
      <DataTemplate> 
       <TextBlock x:Name="test" /> 
      </DataTemplate> 
     </FlipView.ItemTemplate> 

我试过这个解决方案:How do I access a control inside a XAML DataTemplate?

所以我的.cs:

 var _Container = flipView.ItemContainerGenerator.ContainerFromItem(flipView.SelectedItem); 

     var _Children = AllChildren(_Container); 


     var myTextBlock= _Children.OfType<TextBlock>().FirstOrDefault(c => c.Name.Equals("test")); 

     myTextBlock.Text = "test"; 

与方法:

public List<Control> AllChildren(DependencyObject parent) 
    { 
     var _List = new List<Control>(); 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) 
     { 
      var _Child = VisualTreeHelper.GetChild(parent, i); 
      if (_Child is Control) 
       _List.Add(_Child as Control); 
      _List.AddRange(AllChildren(_Child)); 
     } 
     return _List; 
    } 

,但我得到一个NullReferenceException错误:“{”未将对象引用设置到对象的实例。“}” 所以也没有找到我的文本块...

感谢

+0

嘿被它为你工作? – loop

回答

0

这位朋友你好我已检查code..and我发现是一个非常不显眼mistake..that是关于控制 keyword..actually您能够控制它的类型你想在搜索你flipview..like文本块,文本框等...你必须改变你的AllChilderen F.结像这样,然后一切将正常工作..

public List<TextBlock> AllChildren(DependencyObject parent) 
    { 
     var _List = new List<TextBlock>(); 
     int j = VisualTreeHelper.GetChildrenCount(parent); 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) 
     { 
      var _Child = VisualTreeHelper.GetChild(parent, i); 
      if (_Child is TextBlock) 
       _List.Add(_Child as TextBlock); 
      _List.AddRange(AllChildren(_Child)); 
     } 
     return _List; 
    } 

希望它会帮助你..

+0

非常感谢你,它的工作! – Gab

+0

但我对我的FlipView里面的gridView做了同样的事情,并且我又得到了同样的问题:( – Gab