动态改变背景颜色

时间:2013-01-25 16:07:29

标签: c# windows-phone-7 background brush

在我的Windows Phone 7应用中,我希望ContentPanel的背景在指定时间内更改其颜色(在这种情况下为3秒)。基本上我希望它是“闪烁”。

但问题是在循环工作时不会出现更改,在循环完成后,颜色只会改变一次。为什么呢?

byte R;
TimeSpan ts = new System.TimeSpan(0, 0, 0, 3);
DateTime dt1 = new DateTime();           
DateTime dt2 = new DateTime();    

requirement = true;
while (requirement)
{ 
    R = Convert.ToByte(0.5 * 255 * (1 + Math.Sin(DateTime.Now.Millisecond)));
    ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255, R, 125, 70));
    dt1 = DateTime.Now;
    dt2 = DateTime.Now;
    dt2.Subtract(dt1);
    if (dt2.Subtract(ts).CompareTo(dt1) > 0) requirement = false;
 }

甚至可能吗?

3 个答案:

答案 0 :(得分:1)

看起来你的循环太紧了。

请改为尝试:

private DispatcherTimer _timer;

private void StartFlash()
{
  _timer = new DispatcherTimer();
  _timer.Interval = new TimeSpan(0,0,1);
  _timer.Tick += (s,e) => ChangeColour;
}

private void StopFlash()
{
  _timer = null;
}

private void ChangeColour() {
  // Your colour changing logic goes here
  ContentPanel.Background = new SolidColorBrush(Color.FromArgb(a,r,g,b));
}

将该代码放在一个类中。在某个地方调用StartFlash()。 ChangeColour将每秒执行一次。

答案 1 :(得分:0)

你要求DateTime.Now方式太快,所以差异将等于0,因为DateTime的准确度不会达到纳秒(毕竟日期从unix时期标记为毫秒

您可能希望使用更加可靠的逻辑来限制while。

答案 2 :(得分:0)

尝试使用DispatcherTimer以异步方式执行操作。

在方法执行期间,UI不会更新,而且如果您在UI线程中工作。