如何在WPF中一秒后更改边框的背景颜色?

Him*_*pai 0 c# wpf

我点击按钮的边框背景是蓝色的,一秒钟后它应该是红色的。它是红色但不是蓝色。为什么?

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Border Width="111" Name="op" Height="111">
        <Button Name="opbtn" Click="opbtn_Click" Width="50" Height="23">click</Button>
    </Border>
</Window>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

private void opbtn_Click(object sender, RoutedEventArgs e)
{
    op.BorderBrush = System.Windows.Media.Brushes.Blue;
    DateTime obj1 = new DateTime(); 
    DateTime obj2 = DateTime.Now.AddMilliseconds(200);
    while (obj2 > obj1)
    {
        obj1 = DateTime.Now;
    }
    op.BorderBrush = System.Windows.Media.Brushes.Red;
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*art 5

因为您正在使用该循环绑定 UI 线程。UI 线程永远不会有机会将您的第一个更改应用于边框画笔,因为它正忙于在那个紧密循环中颠簸您的 CPU。您应该使用DispatcherTimer或 动画来实现这一点。使用示例DispatcherTimer

private void opbtn_Click(object sender, RoutedEventArgs e)
{
    op.BorderBrush = System.Windows.Media.Brushes.Blue;

    var dispatcherTimer = new DispatcherTimer();
    dispatcherTimer.Interval = TimeSpan.FromSeconds(1);
    dispatcherTimer.Tick += delegate
    {
        op.BorderBrush = System.Windows.Media.Brushes.Red;
        dispatcherTimer.Stop();
    };

    dispatcherTimer.Start();
}
Run Code Online (Sandbox Code Playgroud)