Фон кнопки WPF в Windows 7 - PullRequest
       12

Фон кнопки WPF в Windows 7

1 голос
/ 28 июля 2010

У меня был Windows XP и раньше, и установка фона кнопки wpf всегда работала, но, начиная с Windows 7, фон всегда был синим. Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Возможно, вам понадобится создать собственный шаблон для кнопок. (Я полагаю, что вам нужен только цвет при наведении, а не основной цвет, который следует за свойством Background).

Вот очень простой шаблон кнопок, который может помочь вам начать работу. BackBrush и ForeBrush должны быть настроены в соответствии с требованиями. (И они Back и Fore остальной части приложения, поэтому в этом примере они оглядываются назад)

<Style TargetType="{x:Type Button}">
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="ClickMode" Value="Press"/>
    <Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
    <Setter Property="BorderBrush" Value="#e9dbae" />
    <Setter Property="Foreground" Value="{StaticResource BackBrush}" />
    <Setter Property="Background" Value="{StaticResource ForeBrush}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ButtonBase}">
                    <Border
                    x:Name="Border"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"

                        BorderThickness="2"
                    CornerRadius="2"
                        SnapsToDevicePixels="False"
                    RenderTransformOrigin="0.5,0.5"
                    TextBlock.Foreground="{TemplateBinding Foreground}" >
                        <ContentPresenter
                       Margin="2"
                       HorizontalAlignment="Center"
                       VerticalAlignment="Center"
                       />
                    </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="true">
                        <Setter TargetName="Border" Property="RenderTransform">
                            <Setter.Value>
                                <ScaleTransform ScaleX="0.975" ScaleY="0.975" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="#999999"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
1 голос
/ 28 июля 2010

Для игры с фонами добавьте в Window.Resources (или любое другое приложение ResourceDictionary) этот стиль:

<Style TargetType="Button">
            <Setter Property="Background" Value="Black"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="Moccasin"/>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Background" Value="Red"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Background" Value="Gray"/>
                </Trigger>                
            </Style.Triggers>
        </Style>

Это работает, если вам не нужно переопределять шаблон кнопки (геометрический вид кнопки).Здесь мы не указываем Style x:Key, тогда этот стиль будет применяться ко всем кнопкам в указанной области ресурсов.Чтобы указать стили с разным внешним видом, вы должны каждый стиль пометить x:Key="StyleName", а затем в кнопке определить стиль Style="{DynamicResource StyleName}" или Style="{DynamicResource StyleName}"

...