在我的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错误:“{”对象引用未设置为对象的实例。“}” 所以它找不到我的文本块...
由于
答案 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;
}
希望它会帮助你..