我对这种编码有点新,但我试图在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 :(
}
谢谢你们。我还在学习这个,需要帮助。
答案 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);
}
});