访问FlipView un XAML中的控件

时间:2013-07-23 00:02:00

标签: xaml controls datatemplate

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

你好朋友我已经检查了你的代码..我发现的是一个非常不明显的错误..这是关于控制关键字..实际上它是你要搜索的控件类型你的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;
    }

希望它会帮助你..