定位堆栈面板中的动态项目

时间:2013-01-14 06:04:56

标签: c# silverlight windows-phone-7 xaml windows-8

我对这种编码有点新,但我试图在TextBlock的每个刻度内访问动态创建的StackPanel属性(如TextBlock.Tag,Name等)计时器。我打算对每个TextBlock执行的操作是查看其tag属性是什么,以及它是否与conditoinal匹配,以便计时器以某种方式更改TextBlock属性。

因此,需要找到一种方法对每个计时器进行编码勾选:“对于StackPanel中的每个TextBlock.Tag,如果TextBlock.Tag == this,请执行TextBlock。”

以下是一些帮助可视化我正在做的事情的代码:

Xaml代码:

<StackPanel Name="StackP" Margin="6,0,6,0"/>

C#代码:

{
    for (var i = 0; i < MaxCountOfResults; ++i)
    {
        TextBlock SingleResult= new TextBlock { Text = Resultname.ToString(), FontSize = 20, Margin = new Thickness(30, -39, 0, 0) };

        //a condition to alter certain TextBlock properties.
        if (i == .... (irrelevant to this example))
        {
            SingleResult.Foreground = new SolidColorBrush(Colors.Yellow);
            SingleResult.Tag = "00001";
        }

        //Add this dynamic TextBlock to the StackPanel StackP
        StackP.Children.Add(SingleResult);
    }

//the timer that starts when this entire function of adding the TextBlocks to the StackPanel StackP tree is done.
Atimer = new Timer(new TimerCallback(Atimer_tick), 0, 0, 100);
}


public void Atimer_tick(object state)
{
       The area where I have no idea how to reference the Children of stackpanel StackP with every timer tick. I need help :(

}

谢谢你们。我还在学习这个,需要帮助。

1 个答案:

答案 0 :(得分:2)

你应该可以使用计时器,但我建议使用BackgroundWorker来执行循环而不是可能发生冲突的计时器事件。更好 - 将SilverLight风格的动画与触发器一起使用。

在非UI线程上,您希望使用Dispatcher调用在UI线程上调用异步代码,如:

 Deployment.Current.Dispatcher.BeginInvoke(() =>
  {
    try
    {
        foreach (TextBlock txb in StackP.Children){
          txb.Text = "xyz";
        }
    }
    catch (Exception ex)
    {
      Debug.WriteLine("error: "+ex);
    } 
  });