在堆栈面板中定位动态项

本文关键字:定位 动态 堆栈 | 更新日期: 2023-09-27 17:53:21

我对这种编码有点陌生,但我正试图访问动态创建的TextBlock属性(如TextBlock)。标签,名称等)在一个StackPanel计时器的每一个滴答。我打算对每个TextBlock做的是看看它的tag属性是什么,如果它匹配一个条件,计时器以某种方式改变TextBlock属性。

所以这是一个找到一种方法来编码每个计时器Tick的问题:"对于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 :(
}

谢谢大家。我还在学习这个,需要帮助。

在堆栈面板中定位动态项

您应该能够使用计时器,但我建议使用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);
    } 
  });