在ElementHost控件中托管的WPF控件会更改颜色

时间:2011-12-11 13:22:47

标签: c# .net wpf elementhost

我正在创建一个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;
    }
}

这是正常的吗?我能把它关掉吗?

1 个答案:

答案 0 :(得分:0)

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

关于如何关闭它...我不知道,但我担心这并不容易。我没有在Button上看到任何会改变这种效果的简单属性。这种效果通常通过WPF样式模板来实现,该模板是使成年男性哭泣的主题。您可以在下面找到MSDN概述,但请注意,这假设您在WPF和XAML中工作,而不是在Windows窗体中:

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

我的猜测是你必须将改变后的聚焦风格与不会进行颜色循环的按钮相关联,或者发现聚焦风格所循环的第二个画笔(背景除外)的资源名称,并将该资源设置为与Background相同的颜色。