2015-07-01 3 views
1

Я делаю приборную панель с помощью кнопок. Исходя из значения какого-либо объекта, я изменяю background кнопки. когда пользователь наводит или нажимает кнопку, я хочу изменить цвет фона, чтобы указать его нажатие. У меня есть следующий код:Изменение фона кнопок при наведении и нажмите

<Button Height="100" Width="230" Command="{Binding Path=SetSelectedCollection}" CommandParameter="option1" > 
    <Button.Style> 
     <Style TargetType="{x:Type Button}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Item.IsOk}" Value="True"> 
        <Setter Property="Background" Value="#8FCE5D"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Path=Item.HasWarnings}" Value="True"> 
        <Setter Property="Background" Value="#FFBE39"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Path=Item.HasErrors}" Value="True"> 
        <Setter Property="Background" Value="#C01318"/> 
       </DataTrigger> 
      </Style.Triggers> 

      <Setter Property="FontSize" Value="15" /> 
      <Setter Property="SnapsToDevicePixels" Value="True" /> 

      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type Button}"> 
         <Border Background="{TemplateBinding Background}"> 
          <ContentPresenter/>                           

         </Border> 

         <ControlTemplate.Triggers> 

          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="Background" Value="#E59400" /> 
           <Setter Property="Foreground" Value="White" /> 
           <Setter Property="Cursor" Value="Hand" /> 
          </Trigger> 

          <Trigger Property="IsPressed" Value="True"> 
           <Setter Property="Background" Value="OrangeRed" /> 
           <Setter Property="Foreground" Value="White" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Button.Style> 
</Button> 

Так первая часть все работает отлично, я получаю правильные кнопки цвета на основе статуса элемента им связывания слишком, однако, когда я мыши над или выбрать его цвет делает не изменить. Цвет переднего плана меняется, а курсор меняется, но цвет фона - нет. Я не понимаю, почему нет. Как я могу достичь этого?

+0

Моя думаю, что это использует фон, который вы указали, на основе того, есть ли предупреждения, ошибки и т. д. вместо фона, указанного для свойств MouseOver или IsPressed. Почему бы вам не изменить что-то другое, кроме фона? Похоже, вы пытаетесь отобразить много другой информации, просто используя цвет фона. – CrumblyRock

+0

Я также попытался добавить границу, на мышь и нажал, и никакого эффекта тоже. Есть ли другой подход, который я должен принять? – user1336827

ответ

0

Я уверен, что цвет фона, который вы устанавливаете в DataTriggers, переопределяет триггеры ControlTemplate. Одним из решений является изменение кисти границы, чтобы указать на мышь или нажатие мыши. Другая мысль заключалась бы в добавлении значка в шаблон кнопки, если элемент имеет ошибки и т. Д. Вместо изменения цвета фона.

Вот исходный код, модифицирована таким образом, что он изменяет цвет границы для состояния мыши, и сохраняет фон окраски для IsOk/HasErrors/HasWarnings:

<Style TargetType="{x:Type Button}"> 
<Style.Triggers> 
    <DataTrigger Binding="{Binding Path=Item.IsOk}" Value="True"> 
     <Setter Property="Background" Value="#8FCE5D"/> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=Item.HasWarnings}" Value="True"> 
     <Setter Property="Background" Value="#FFBE39"/> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=Item.HasErrors}" Value="True"> 
     <Setter Property="Background" Value="#C01318"/> 
    </DataTrigger> 
</Style.Triggers> 

<Setter Property="FontSize" Value="15" /> 
<Setter Property="SnapsToDevicePixels" Value="True" /> 
<Setter Property="BorderThickness" Value="1"/> 

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Border Background="{TemplateBinding Background}" 
        BorderThickness="{TemplateBinding BorderThickness}" 
        BorderBrush="{TemplateBinding BorderBrush}"> 
       <ContentPresenter/> 

      </Border> 

      <ControlTemplate.Triggers> 

       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="BorderBrush" Value="#E59400" /> 
        <Setter Property="Foreground" Value="White" /> 
        <Setter Property="Cursor" Value="Hand" /> 
       </Trigger> 

       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="BorderBrush" Value="OrangeRed" /> 
        <Setter Property="Foreground" Value="White" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

+0

Да, я думаю, что все будет хорошо. Благодарю. – user1336827

Смежные вопросы