2013-07-23 6 views
1

В моем Windows 8 приложения, я пытаюсь изменить текст TextBlock внутри DataTemplate в виде FlipView ...Доступ к элементам управления внутри 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: «{» Ссылка на объект не указывает на экземпляр объекта. «}» Так что не находит мой TextBlock ...

Благодаря

+0

Эй это работает для вас? – loop

ответ

0

привет друг я проверил свой code..and то, что я нашел очень незаметным mistake..that идет о Control keyword..actually это ваш тип управления вы хотите найти в вашем flipview..like textblock, textbox и т. д. ... вам нужно просто сменить 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

OH Большое спасибо, это сработало! – Gab

+0

Но я сделал то же самое для gridView внутри моего FlipView, и снова получаю ту же проблему :( – Gab

Смежные вопросы