Стиль выделения MouseOver, возвращающийся к значению по умолчанию через секунду (вызвано Aero?)

StackOverflow https://stackoverflow.com/questions/250622

Вопрос

Я пытался стилизовать свои ComboBox-ы так, чтобы они соответствовали остальному интерфейсу, но у меня возникли проблемы с выделением IsMouseOver. Он подсвечивается цветом, который я определяю на секунду, а затем постепенно возвращается к цвету по умолчанию, что-то вроде крутого эффекта, но не того, к чему я стремлюсь. Вот мой стиль:

<Style TargetType="ComboBox">
    <Style.Triggers>
        <Trigger Property="ComboBox.IsMouseOver" Value="True">
            <Setter Property = "Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>

Что я могу сделать, чтобы цвет фона оставался?

Это было полезно?

Решение

Проблема действительно в шаблоне ComboBox по умолчанию. Если вы используете Reflector , чтобы открыть сборку PresentationFramework.Aero, вы можете взглянуть на класс ButtonChrome. Существует метод OnRenderMouseOverChanged, который скрывает красный фон.

Несмотря на то, что это большая работа, по крайней мере для ComboBox, вы, вероятно, захотите переопределить шаблон по умолчанию для ComboBox. Вы можете получить базовое представление о том, что такое Temlpate ComboBox, используя Показать мне Шаблон или Blend .

Вы можете использовать тот же стиль, чтобы переопределить шаблон.

<Style TargetType="{x:Type ComboBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBox}">
                <!-- Template Here -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Другие советы

Вы можете переопределить это поведение, получив копию шаблона по умолчанию из WPF Visual Studio Designer, а затем в стиле ComboBoxReadonlyToggleButton закомментируйте раздел ButtonChrome и замените его границей. Вот ссылка на сайт, где я нашел решение -

scroll top