1

在我的 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 错误:“{”对象引用未设置为对象的实例。”}”所以它找不到我的文本块......

谢谢

4

1 回答 1

0

你好朋友我检查了你的代码..我发现是一个非常不明显的错误..那是关于Control关键字..实际上它是您想要在您的 Flipview 中搜索的控件类型..如文本块、文本框等。 ..您必须像这样更改您的 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;
    }

希望它会帮助你..

于 2013-07-23T08:13:56.583 回答