WPF TextBox перерисовывается несколько раз при наведении мыши - PullRequest
3 голосов
/ 29 сентября 2010

Я использую Windows Performance Suite (часть Microsoft Windows SDK) для профилирования моего примера приложения.Я использую «Перфоратор» с опцией «Показать наложение обновления грязной области», которая позволяет мне видеть, когда и где области перерисовываются в приложении.

При наведении курсора мыши на элемент управления TextBox я вижу, что он перерисовывается несколько раз, и загрузка ЦП возрастает.Я протестировал очень простое окно с элементом управления 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 голосов
/ 26 октября 2012

Это не нормально для WPF перерисовывать элемент управления при наведении мыши, потому что WPF обновляет только регион, который изменился (с использованием графики в режиме сохранения):

Одно из самых больших преимуществ в использованииГрафика сохраненного режима заключается в том, что WPF может эффективно оптимизировать то, что необходимо перерисовать в приложении.Даже если у вас сложная сцена с различными уровнями непрозрачности, вам, как правило, не нужно писать специальный код для оптимизации перерисовки (см. Интеллектуальное перерисовывание в разделе Графика с сохраненным режимом ).*

Проблема в этом случае заключается в том, что активная тема Windows применяется к элементам управления.При наведении указателя мыши на кнопку вы увидите, что кнопка слегка меняется на «светло-голубой прозрачный» цвет (хотя это зависит от вашей активной темы Windows).В то же время, когда вы фокусируете кнопку, к кнопке применяется другой «анимационный» тип поведения.Вы можете ясно видеть это с проверенной грязной областью.

Если вы хотите изменить это, вам нужно определить свою собственную тему, переопределяя поведение по умолчанию-theme-theme.Вот сообщение , с которого можно начать.

...