Доступ к элементам управления внутри FlipView и XAML
В моем приложении для Windows 8 я пытаюсь изменить текст текстового блока внутри шаблона данных FlipView...
моя табличка данных FlipView (упрощенная...):
<FlipView.ItemTemplate>
<DataTemplate>
<TextBlock x:Name="test" />
</DataTemplate>
</FlipView.ItemTemplate>
Я попробовал это решение: как получить доступ к элементу управления внутри шаблона данных XAML?
Итак, мой.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: "{" Ссылка на объект не установлена для экземпляра объекта."}" Таким образом, он не находит мой текстовый блок...
Спасибо
1 ответ
Привет, друг, я проверил твой код... и обнаружил, что это очень незаметная ошибка... речь идет о ключевом слове Control... на самом деле это твой тип элемента управления, который ты хочешь искать в флипвью.. как текстовый блок, текстовое поле и т. д. Вы должны просто изменить свою функцию AllChilderen, как это, и тогда все будет работать нормально..
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;
}
надеюсь, это поможет вам..