2008-10-30 8 views
1

Я бы попытался создать свой ComboBoxes в соответствии с остальной частью пользовательского интерфейса, но у меня возникли проблемы с подсветкой IsMouseOver. Он выделяется цветом, который я указываю на секунду, а затем исчезает до цвета по умолчанию, это классный эффект, но не то, что я собираюсь сделать. Вот мой стиль:Стиль подсветки MouseOver, возвращающийся к умолчанию после второго (вызванный Aero?)

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

ответ

4

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

Хотя, по крайней мере, для ComboBox очень много работы, вы, вероятно, захотите переопределить шаблон по умолчанию для ComboBox. Вы можете получить общее представление о том, что такое temlpate для ComboBox, используя Show Me The Template или Blend.

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

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

Спасибо, я боялся этого. Сейчас я работаю над созданием своего шаблона. Ссылка Show Me the Template была очень полезной. – 2008-10-31 19:48:59

0

Вы можете переопределить это поведение, получить копию шаблона по умолчанию из Visual Studio конструктора WPF, а затем в стиле комментарии ComboBoxReadonlyToggleButton к разделу ButtonChrome и заменить его на границе. Вот ссылка на сайт, где я нашел решение - http://www.scriptscoop.net/t/d346cf01d844/c-c-wpf-combobox-mouse-over-color.html

Вот мой фрагмент кода

<Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="IsTabStop" Value="false"/> 
    <Setter Property="Focusable" Value="false"/> 
    <Setter Property="ClickMode" Value="Press"/> 
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ToggleButton}"> 
     <!-- Replace the ButtonChrome - this eliminated the following 
      problem: When the mouse was moved over the ComboBox 
      the color would change to the color defined in ___ but 
      then would 
      immediately change to the default Aero blue 
      gradient background of 2 powder blue colors - 
      Had to comment out the   
      below code and replace it as shown 
      <Themes:ButtonChrome x:Name="Chrome" BorderBrush="     {TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" SnapsToDevicePixels="true"> 
       <Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"> 
       <Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/> 
       </Grid> 
      </Themes:ButtonChrome>--> 

     <!-- Here is the code to replace the ButtonChrome code --> 
     <Border x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> 
      <Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"> 
      <Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/> 
      </Grid> 
     </Border> 
     <!-- End of code to replace the Button Chrome --> 

Я также добавил код, чтобы изменить цвет фона DarkOrange - Этот код вошел в ControlTemplate (в разделе) для стиля для ComboBox.

<!-- Hover Code - Code that was added to change the ComboBox background 
    color when the use hovers over it with the mouse --> 
<Trigger Property="IsMouseOver" Value="True"> 
    <Setter Property="Background" Value="DarkOrange"></Setter> 
</Trigger> 
<!-- Hover Code - End -->