WPF TextBox使用鼠标悬停重新绘制多次

时间:2010-09-28 23:40:22

标签: wpf-controls

我正在使用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>

1 个答案:

答案 0 :(得分:0)

WPF在鼠标悬停时重绘控件并不“正常”,因为WPF只更新已更改的区域(使用保留模式图形):

  

使用保留模式图形的最大好处之一是   WPF可以有效地优化需要重绘的内容   应用。即使你有一个不同级别的复杂场景   不透明度,您通常不需要编写专用代码   优化重绘(参见Intelligent Redrawing in the Retained Mode Graphics section)。

这种情况下的问题是活动的Windows主题应用于控件。当您将鼠标移到按钮上时,您会看到该按钮稍微变为“浅蓝色透明”颜色(尽管这取决于您的活动Windows主题)。同时,一旦您关注按钮,另一个“动画”类型的行为将应用于按钮。你可以通过检查脏区来清楚地看到这一点。

如果要更改此设置,则需要定义自己的主题,覆盖default-theme-behavior。这是一个post,可以帮助您入门。