0

我正在创建一个 WPF 'Button' 控件并使其成为我的 ElementHost 控件的子控件。

按钮的背景设置为红色。

当我运行我的项目时,按钮会改变颜色,它似乎每隔几秒钟就会循环一次,从红色变为浅蓝色然后再返回......直到表单失去焦点。

如果我将鼠标悬停在按钮上,它会变成蓝色,然后当我离开按钮时,它会再次开始这种颜色循环......我的代码就像......

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        System.Windows.Controls.Button but = new System.Windows.Controls.Button();
        but.Background = System.Windows.Media.Brushes.Red;
        elementHost1.Child = but;
    }
}

这是正常的吗?我可以关掉它吗?

4

1 回答 1

0

是的,这很正常。当 WPF 按钮具有输入焦点时,它们总是会产生微妙的颜色循环效果,您的按钮就是这种情况,因为它是表单上的唯一控件。在您的示例中,这不是很微妙,因为红色与按钮循环通过的其他蓝色相差很远 - 删除该背景分配以查看预期的效果。尝试将另一个带有另一个 WPF 按钮的 ElementHost 添加到同一个表单中,您会看到只有焦点按钮执行颜色循环。

至于怎么关掉……我不知道,但恐怕不容易。我在 Button 上看不到任何可以改变这种效果的简单属性。这样的效果一般是通过WPF风格的模板来实现的,这是一个让成年男子哭泣的主题。您可以在下面找到 MSDN 概述,但请注意,这假定您在 WPF 和 XAML 中工作,而不是在 Windows 窗体中工作:

http://msdn.microsoft.com/en-us/library/bb613570.aspx

我的猜测是,您必须将更改后的 Focused 样式与不会进行颜色循环的按钮相关联,否则会发现 Focused 样式循环到的第二个画笔的资源名称(背景除外),然后设置资源与背景颜色相同。

于 2011-12-11T14:31:01.270 回答