locked
Когда используется стилизация кнопки, почему она работает по разному под Windows XP и Windows Vista? RRS feed

  • Общие обсуждения

  • Когда вы используете стилизацию Кнопки в WPF вот так :

    <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <Button>
        <Button.Style>
          <Style TargetType="Button">
            <Style.Triggers>
              <Trigger Property="IsMouseOver" Value="true">
                <Setter Property="Background" Value="Yellow"/>
              </Trigger>
            </Style.Triggers>
          </Style>
        </Button.Style>
      </Button>
    </Page>
    

    Вы можете видеть что IsMouseOver триггер работает не верно, когда он запущен под Windows Vista,а под Windows XP верно.

    Причина этого - реализация ButtonChrome  в PresentationFramwork.Luna.dll,которая используется под Windows XP, и реализация ButtonChrome  в PresentationFramwork.Aero.dll, которая используется под Windows Vista имеет разную  интерпретацию свойства RenderMouseOver. Под Windows XP, рисуется подсвеченная  граница перегруженным ButtonChrome.OnRender() методом, но под Windows Vista , дополнительно рисуется подсвеченный фон, что бы стало похоже на Vista Aero тему, который будет заслонять фон, установленный вами с помощью переключателя стилей.

    Чтобы обойти эту проблему, лучше заменить ControlTemplate кнопки по умолчанию на вашу собственную реализацию.
    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 23:03 MSDN Forums consolidation (От:Разработка Windows-приложений)
    17 марта 2010 г. 12:41
    Модератор