在堆栈面板中定位动态项
本文关键字:定位 动态 堆栈 | 更新日期: 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);
}
});