WPF TextBox在鼠标悬停时重复绘制多次

12 浏览
0 Comments

WPF TextBox在鼠标悬停时重复绘制多次

我正在使用Windows性能套件(属于Microsoft Windows SDK的一部分)来对我的示例应用程序进行性能分析。我正在使用"Perforator"工具,并启用了"显示脏区域更新叠加"选项,这使我能够看到应用程序中的哪些区域何时重新绘制。

当我将鼠标悬停在一个TextBox控件上时,我发现它会被多次重新绘制,CPU利用率也会上升。我使用了一个非常简单的窗口,只有一个TextBox控件和一个按钮控件。

WPF在鼠标悬停时重新绘制控件是正常的吗?

有什么方法可以最小化这种情况吗?

以下是我使用的窗口代码:


    
        
            
            
            
        
    

0
0 Comments

WPF TextBox在鼠标悬停时多次重绘的原因是因为WPF只会更新发生变化的区域(使用保留模式图形)。这是使用保留模式图形的最大好处之一,WPF可以有效地优化应用程序中需要重新绘制的部分。即使你有一个具有不同透明度级别的复杂场景,通常也不需要编写特定的代码来优化重绘。

在这种情况下的问题是,窗口的活动主题被应用到控件上。当你将鼠标移动到按钮上时,你会看到按钮稍微变成了一个“浅蓝色透明”的颜色(这取决于你的活动Windows主题)。同时,当你对按钮进行焦点操作时,另一种“动画”类型的行为也会应用到按钮上。你可以通过检查脏区域来清楚地看到这一点。

如果你想改变这个行为,你需要定义自己的主题,覆盖默认的主题行为。下面是一个可以帮助你入门的帖子:链接

解决方法是定义自己的主题,覆盖默认的主题行为。具体可以参考上面提到的链接。

0