2013-03-26 20 views
8

Znalazłem i wypróbowałem wiele rozwiązań w Internecie, które powinny pozwolić mi wyłączyć mojej funkcji wyświetlania WPF ListBox, ale żaden z nich nie działa dla mnie. Ten zrzut ekranu pokazuje efekt najechania chciałbym ukryć lub pozbyć:WPF ListBox wyłączyć efekt hover

hover effect

To (uproszczona wersja) kodu XAML Obecnie mam:

<ListBox ItemsSource="{Binding Logs}" Grid.Column="1" Width="800" Height="100" > 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Style.Triggers> 
       <Trigger Property="Control.IsMouseOver" Value="True"> 
        <Setter Property="Control.Background" Value="Transparent" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

jednak z jakiegoś powodu nie wydaje mi się, żeby to działało. Czy mój rodzic ListBox (ten w tle) lub inna kontrola może nadpisać jego styl dziecięcy przez przypadek? (Już próbowałem zastąpić styl rodziców).

Każda pomoc będzie bardzo ceniona. :(

+3

Właśnie stworzył nową aplikację WPF tylko z pola listy, a ja nie mam Efekt domyślny: – Tomtom

+0

To dość kłopotliwe, testowałem to na Windowsie 8 (jak widać na moim zrzucie ekranu) i na Windows 7, gdzie efekt unoszący się wyświetla w brzydszej niebieskości ... Spróbuję stworzyć nowy wpf-aplikacja za pomocą listbox za minutę, aby sprawdzić, czy to robi różnicę czy nie. – beta

+0

Tak, masz rację, ListBox nie ma domyślnie efektu najechania. Sądzę więc, że jest tam, ponieważ mamy zestaw globalnych stylów dla wszystkich kontrolek podrzędnych. Czy istnieje sposób na zastąpienie tego stylu? Obecnie próbuję zacząć od beta

Odpowiedz

13

zmodyfikować domyślny styl ListBoxItem

<Style TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
     <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
     <Setter Property="Padding" Value="2,0,0,0"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> 
         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
          <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="true"/> 
           <Condition Property="Selector.IsSelectionActive" Value="false"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> 
          <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/> 
         </MultiTrigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Wystarczy dodać wyzwalacz

<Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="Transparent"/> 
         </Trigger> 
+5

Dlaczego nie '' i zamiast przedefiniować cały styl po prostu dodać na nim? –