我正在使用Windows性能套件(Microsoft Windows SDK的哪一部分)来分析我的示例应用程序。我使用“Perforator”选项“Show dirty-region update overlay”,这使我能够看到应用程序中重绘区域的时间和位置。
当我将鼠标悬停在TextBox控件上时,我发现它被多次重绘并且CPU利用率上升。我测试了一个非常简单的窗口,只有一个TextBox控件和一个按钮控件。
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">
<Grid>
<StackPanel Orientation="Horizontal">
<TextBox Height="25" Width="150" >
</TextBox>
<Button Margin="10,0,0,0" Height="25">1211</Button>
</StackPanel>
</Grid>
答案 0 :(得分:0)
WPF在鼠标悬停时重绘控件并不“正常”,因为WPF只更新已更改的区域(使用保留模式图形):
使用保留模式图形的最大好处之一是 WPF可以有效地优化需要重绘的内容 应用。即使你有一个不同级别的复杂场景 不透明度,您通常不需要编写专用代码 优化重绘(参见Intelligent Redrawing in the Retained Mode Graphics section)。
这种情况下的问题是活动的Windows主题应用于控件。当您将鼠标移到按钮上时,您会看到该按钮稍微变为“浅蓝色透明”颜色(尽管这取决于您的活动Windows主题)。同时,一旦您关注按钮,另一个“动画”类型的行为将应用于按钮。你可以通过检查脏区来清楚地看到这一点。
如果要更改此设置,则需要定义自己的主题,覆盖default-theme-behavior。这是一个post,可以帮助您入门。