1

私はこの種のコーディングに少し慣れていませんが、タイマーのすべてのティックTextBlock内で動的に作成されたプロパティ(TextBlock.Tag、Nameなど)にアクセスしようとしています。StackPanel私がそれぞれでやろうとしていることは、TextBlockそのtagプロパティが何であるかを確認し、それが条件に一致する場合は、タイマーがTextBlock何らかの方法でプロパティを変更することです。

したがって、すべてのタイマーをコーディングする方法を見つけることが重要です。ティック:「TextBlock.TagStackPanelのすべてについて、もしそうなら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 :(

}

君たちありがとう。私はまだこれを学んでいて、助けが必要です。

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 に答える