В WPF Gradient Button импульсы между цветом по умолчанию и новым градиентом после нажатия - как остановить - PullRequest
6 голосов
/ 08 декабря 2011

Это очень раздражающий артефакт, который я заметил в WPF, и мне было любопытно, что я мог сделать неправильно, поскольку я делаю то, что кажется простым кодом в WPF XAML:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ExampleShapes.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="400" Height="400">
<Grid x:Name="LayoutRoot">
    <Button Margin="50,50,50,50" Content="I pulse when clicked Why?">
        <Button.Background>
            <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FF0C0B0B" Offset="1"/>
                <GradientStop Color="#FFBF5656"/>
            </LinearGradientBrush>
        </Button.Background>
    </Button>
</Grid>

Похоже, что в .NET есть некоторые настройки по умолчанию, о которых я не знаю с событиями MouseOver и Click, которые я НЕ ХОЧУ.Я не против того, чтобы при наведении курсора мыши цвет градиента изменялся на значение по умолчанию, но когда я его удаляю, он снова меняется.Однако даже до применения базового кода C # для события «CLICK» (не в примере) он предполагает «пульсирующее» поведение между указанным градиентом и значением по умолчанию.Это также верно для простого цвета.Что дает?

Для получения дополнительной информации я проектирую 64-разрядную версию Windows 7 с Visual Studio 2010 и Expression Blend 3, используя .NET 4.0 для VS2010, неуверенную для EB3, поскольку это более старая копия, и оба они делают это.Есть ли простой способ изменить поведение по умолчанию или мне нужно настроить новый шаблон пользователя для кнопки?

Любая помощь очень ценится, спасибо!

1 Ответ

6 голосов
/ 08 декабря 2011

Похоже, что-то связано со стилем Focused для кнопки. Я предполагаю, что стиль фокусировки по умолчанию чередуется между обычным фоном и фоном при наведении мыши, что вызывает «пульсирующее» поведение.

Нажатие на кнопку устанавливает ее как фокус, но вы также можете добиться того же эффекта, просто нажав на кнопку.

Редактировать

Рассмотрим это немного подробнее, и, похоже, по умолчанию для темы Aero используется любой элемент, имеющий фокус ввода. Вы можете установить для кнопки Focusable="False", однако тогда вы не сможете нажать на кнопку или нажать клавишу Enter на ней (все равно можете нажать на нее), и лично я ненавижу приложения, по которым не удается перемещаться с помощью клавиатуры.

Чтобы избежать мигания при нажатии, вы можете установить фокус на другой элемент управления в конце вашего события щелчка, однако эффект все равно будет возникать, когда вы нажимаете кнопку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...