我有一个名为序列的布尔值列表。我想根据列表的值更改形状的颜色,也就是说,我想迭代列表的值,并在每次偶然发现True时用某种颜色(例如黄色)填充形状每当我偶然发现一个假值时,改变颜色并改变颜色(蓝色)。我试过这样做:
foreach(bool element in Sequence)
{
if(element){ ellipse.Fill = new SolidColorBrush(Colors.Yellow); }
else{ ellipse.Fill = new SolidColorBrush(Colors.Blue); }
int milisecond = 200;
Thread.Sleep(miliseconds);
}
但是颜色不会交替出现。
这是XAML:
`<Ellipse x:Name="elipse" Height="100" Margin="151,52,0,0" Stroke="Black" Width="100" /> `
我需要一个触发器吗?我做错了什么? 提前谢谢你,如果有些事情看起来很有趣,请原谅我的坏英语。
答案 0 :(得分:1)
foreach(bool element in Sequence)
{
if(element){ ellipse.Fill = new SolidColorBrush(Colors.Yellow); }
else{ ellipse.Fill = new SolidColorBrush(Colors.Blue); }
int milisecond = 200;
Thread.Sleep(miliseconds);
}
在UI线程上同步运行 。因此,UI永远不会有机会更新颜色。改为使用计时器。
当然,您不能foreach
,因为您必须跟踪当前的索引。 的一种方法是保留当前代码,但用Thread.Sleep
替换await Task.Delay
。
(Peter Duniho道歉,他添加了这个代码示例,但这个答案似乎只是为了一个人而哭泣):
<强>&LT;编辑&gt; 强>
基于async
的看起来像这样(并且恕我直言,使用计时器):
foreach (bool element in Sequence)
{
ellipse.Fill = new SolidColorBrush(element ? Colors.Yellow : Colors.Blue);
await Task.Delay(200);
}
当然,为了能够使用await
,需要将其使用的方法声明为async
。遗憾的是,原始问题并未提供完整的方法或其签名,但可能OP可以自行研究async
方法的使用并了解如何转换。
的&LT; /编辑&gt; 强>
整个用例似乎应该重新设计,但其中一个解决方案应该让你走得更远这个路径。请记住,如果您正在编写代码隐藏,那么您可能做错了。