[英]How to change a fill color for an ellipse in discrete steps in c# WPF
我有一个名为Sequence的布尔值列表。 我想根据列表的值更改形状的颜色,也就是说,我每次遍历True时都要遍历列表的值并用某种颜色(例如黄色)填充形状每次我发现False值时,更改填充的颜色(变为蓝色)。 我试图这样做:
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" /> `
我需要扳机吗?我在做什么错? 预先谢谢您,如果有什么好笑的话,请原谅我的英语不好。
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的道歉,他添加了此代码示例,但是这个答案似乎正在呼唤一个人) :
<编辑>
基于async
的代码看起来像这样(恕我直言,优于使用计时器):
foreach (bool element in Sequence)
{
ellipse.Fill = new SolidColorBrush(element ? Colors.Yellow : Colors.Blue);
await Task.Delay(200);
}
当然,要能够使用await
,使用它的方法需要声明为async
。 不幸的是,最初的问题并没有提供完整的方法及其签名,但是大概OP可以自己研究async
方法的使用并查看如何进行转换。
</编辑>
整机采用案例似乎应该重新设计,但这些解决方案之一应该让你进一步走上这条道路。 请记住,如果您在编写代码隐藏程序,则可能做错了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.