2009-04-27 11 views
14

Przepraszam, jeśli wcześniej ktoś o to pytał, ale nie znalazłem rozwiązania tego, czego szukam w powiązanych pytaniach lub w Google.Kolor listy wyboru WPF Kolor

W mojej aplikacji próbuję odtworzyć okno dialogowe Nowy dokument Words, listę po lewej stronie pozycji i po prawej ikonę z tekstem pod spodem. W programie Word ma pomarańczowy gradient po najechaniu myszą i ciemniejszy gradient po wybraniu elementu. Mam większość tego odtworzonego, z wyjątkiem zmiany koloru tła po wybraniu elementu. Oto kod używam do tworzenia w ten sposób:

<ListView Margin="236,34,17,144" Name="listView1" HorizontalContentAlignment="Stretch"> 
     <ListView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Columns="5" IsItemsHost="True" VerticalAlignment="Top" > 
       </UniformGrid> 
      </ItemsPanelTemplate> 
     </ListView.ItemsPanel> 
     <ListView.ItemTemplate> 
      <DataTemplate > 
       <StackPanel HorizontalAlignment="Center" Width="auto"> 
        <Image Source="images/document32.png" HorizontalAlignment="Center"/> 
        <TextBlock Text="{Binding}" HorizontalAlignment="Center" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
     <ListView.ItemContainerStyle> 
      <Style TargetType="{x:Type ListViewItem}" >     
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter Property="Foreground" Value="Yellow" /> 
         <Setter Property="Background" Value="Orange" /> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter Property="Foreground" Value="Black" /> 
         <Setter Property="Background"> 
          <Setter.Value> 
           <LinearGradientBrush EndPoint="0.5,1" StartPoint="1,0"> 
            <GradientStop Color="#d3e7ff" Offset="0.986"/> 
            <GradientStop Color="#b0d2fc" Offset="0.5"/> 
            <GradientStop Color="#8ec1ff" Offset="0.51"/> 
           </LinearGradientBrush> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 

       </Style.Triggers> 
      </Style> 
     </ListView.ItemContainerStyle> 
    </ListView> 

Więc ten tworzy wygląd Idę, czy myszy nad i kiedy wybrać element w ListView będzie zmienić tekst czcionek Żółty, ale odmawia zmiany tła z domyślnego niebieskiego na pomarańczowy, a najlepiej, aby był to inny gradient, a nie przepełniony kolor. Dzięki za pomoc.

Odpowiedz

31

Istnieje kilka hacków, które można zrobić, jak nadpisanie klucza koloru systemu, ale najprawdopodobniej będziesz chciał podać nowy szablon, aby to osiągnąć. Oto jeden ładnie wyglądający model:

<Style x:Key="ListboxItemStyle" TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="Margin" Value="1,2,1,1"/> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="Background" Value="{StaticResource NormalItemBackground}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
       <Grid> 
        <Border Background="{TemplateBinding Background}" /> 
        <Border Background="#BEFFFFFF" Margin="3,1"> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition /> 
           <RowDefinition /> 
          </Grid.RowDefinitions> 
          <Border Margin="2,1,2,0" Grid.Row="0" Background="#57FFFFFF" /> 
         </Grid> 
        </Border> 
        <ContentPresenter Margin="8,5" /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsMouseOver" Value="True" /> 
          <Condition Property="IsSelected" Value="False"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="Background" Value="{StaticResource HotItemBackground}" /> 
        </MultiTrigger> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Background" Value="{StaticResource SelectedItemBackground}" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
<Style x:Key="ListBoxStyle" TargetType="{x:Type ListBox}"> 
    <Setter Property="ItemContainerStyle" Value="{DynamicResource ListboxItemStyle}" /> 
    <Setter Property="Margin" Value="3,3,2,1" /> 
</Style> 
Powiązane problemy