C# 动态更改背景颜色
在我的Windows Phone 7应用程序中,我希望C# 动态更改背景颜色,c#,windows-phone-7,background,brush,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(); r
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;
}
甚至有可能吗?您要求的是DateTime。现在速度太快了,所以差值将等于0,因为DateTime的精度不到纳秒(毕竟,从unix纪元开始,日期以毫秒标记)
您可能希望使用更可靠的逻辑来限制while。您要求的是DateTime。现在速度太快了,因此差值将等于0,因为DateTime的精度不会达到纳秒(日期毕竟是从unix纪元以毫秒标记的)
您可能希望使用更可靠的逻辑来限制while。看起来您的循环太紧了 请尝试以下方法:
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()。ChangeColor将每秒执行一次。看起来您的循环太紧了 请尝试以下方法:
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()。ChangeColor将每秒执行一次。尝试以异步方式使用to do
在方法执行期间,UI不会更新,而且如果您在UI线程中工作。尝试以异步方式使用to do
在方法执行期间,UI不会更新,而且如果您在UI线程中工作。在获取
dt1
和dt2
之间,尝试添加对thread.sleep()的调用。
在获取dt1
和dt2
之间,此解决方案也不起作用。不过,感谢您的努力。此解决方案也不起作用。谢谢你的努力。