1

我对这种编码有点陌生,但我试图在计时器TextBlock的每个滴答声中访问动态创建的属性(如 TextBlock.Tag、Name 等) 。StackPanel我打算对每个属性做的TextBlock是查看它的tag属性是什么,以及它是否与条件匹配,以便计时器以TextBlock某种方式更改属性。

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

这是一些代码来帮助可视化我在做什么:

Xml代码:

<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 :(

}

谢谢你们。我仍在学习这一点,需要帮助。

4

1 回答 1

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);
    } 
  });
于 2013-01-14T06:12:24.207 回答