Доступ к элементам управления внутри 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;
    }

надеюсь, это поможет вам..

Другие вопросы по тегам