【问题标题】:WPF TextBox repaints multiple times with mouse hoverWPF TextBox 用鼠标悬停多次重绘
【发布时间】:2010-09-28 23:40:21
【问题描述】:

我正在使用 Windows 性能套件(Microsoft Windows SDK 的一部分)来分析我的示例应用程序。我正在使用带有“显示脏区更新覆盖”选项的“Perforator”,这使我能够查看在应用程序中何时何地重绘区域。

当我将鼠标悬停在 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>

【问题讨论】:

    标签: wpf-controls


    【解决方案1】:

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

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

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

    如果你想改变它,你需要定义你自己的主题,覆盖默认主题行为。这是一个post,可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2015-06-06
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多