所以我编写了一些代码,通过调用for循环从字符串列表创建TextBlocks:
List<string> menuPages = new List<string>() { "Home", "Media", "Settings" };
//method called from constructor:
private void createHeaders ()
{
for (int i=0; i<menuPages.Count; i++)
{
TextBlock iheader = new TextBlock();
iheader.Name = menuPages[i];
iheader.Text = menuPages[i];
if (i==pageIndex)
{ iheader.FontSize = 36; }
else
{ iheader.FontSize = 32; }
stacky.Children.Add(iheader); //Adding button to stack panel
}
}
现在,我一直在写另一个方法,该方法将循环遍历每个TextBlock并将文本更改为我想要的内容。我得到了一个为stackPanel子代工作的foreach循环:(在stacky.Children中为TextBlock tBlock) 但是我需要使用索引for循环。下面的代码是我想要实现的方式:
//Re-render headers
for (int i = 0; i < menuPages.Count; i++)
{
//TextBlock menuPages[i].text = "foo";
}
现在上面的语法当然不起作用,所以我的问题是,如何从列表中的字符串寻址TextBlocks?
答案 0 :(得分:1)
只需在列表中创建文本块即可。因此,您可以使用索引的forloop轻松进行操作。
List<string> menuPages = new List<string>() { "Home", "Media", "Settings" };
List<TextBlock> textBlocks = new List<TextBlock>();
public MainPage()
{
this.InitializeComponent();
createHeaders();
}
private void createHeaders()
{
for (int i = 0; i < menuPages.Count; i++)
{
TextBlock iheader = new TextBlock();
iheader.Name = menuPages[i];
iheader.Text = menuPages[i];
iheader.FontSize = 32;
textBlocks.Add(iheader);
Stacky.Children.Add(iheader);
}
}
private void change_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < textBlocks.Count; i++)
{
textBlocks[i].Text = "foo";
}
}
答案 1 :(得分:1)
如果StackPanel
仅包含要动态添加的TextBlock
元素,则也可以通过以下方式访问它们:
foreach (var textBlock in Stacky.Children.OfType<TextBlock>())
{
textBlock.Text = "something";
}
此方法使用OfType<T>
LINQ扩展方法,该方法按指定的类型过滤输入集合,因此它仅返回Stacky
的子元素TextBlock
。
如果您有更多内容,请在StackPanel
中使用@Vignesh G的答案。