通过XAML访问FlipView内部的控件



在我的Windows 8应用程序中,我正试图更改FlipView的DataTemplate内的文本块的文本。。。

我的FlipView数据模板(简化…):

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

我尝试了这个解决方案:如何访问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错误:"{"对象引用未设置为对象的实例。"}"所以它找不到我的文本块。。。

感谢

你好,朋友,我已经检查了你的代码。。我发现了一个不引人注意的错误。。这是关于Control关键字的。。实际上,它是你想要在你的flipview中搜索的控件类型。。像textblock、textbox等…你只需要像这样更改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;
    }

希望它能帮助你。。

最新更新