2010-10-25 2 views
4

У меня есть следующее окно, которое отображает список. Я определил стиль для ListViewItem:Стиль ListViewItem в ResourceDictionary

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary> 
        <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
         <Style.Triggers> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsMouseOver" Value="True" /> 
            <Condition Property="IsSelected" Value="False"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Background" Value="Red" /> 
          </MultiTrigger> 
          <Trigger Property="IsSelected" Value="True"> 
           <Setter Property="Background" Value="Blue" /> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </ResourceDictionary> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 
    <DockPanel> 
     <ListView x:Name="listView"/> 
    </DockPanel> 
</Window> 

код позади просто определяется как:

 public MainWindow() 
     { 
      InitializeComponent(); 
      for (int i = 1; i <= 100; i++) 
      { 
       listView.Items.Add(i); 
      } 
     } 

Теперь, когда я запустить приложение, все выглядит хорошо для первого элемента в списке, кроме , Для первого элемента ни один из стилей не применяется. Если я изменить XAML к ниже, удаляя соответствующие строки из словаря ресурсов, все работает правильно:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
      <Style.Triggers> 
       <MultiTrigger> 
        <MultiTrigger.Conditions> 
         <Condition Property="IsMouseOver" Value="True" /> 
         <Condition Property="IsSelected" Value="False"/> 
        </MultiTrigger.Conditions> 
        <Setter Property="Background" Value="Red" /> 
       </MultiTrigger> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="Background" Value="Blue" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <DockPanel> 
     <ListView x:Name="listView"/> 
    </DockPanel> 
</Window> 

Я нашел некоторые образцы кода в Интернете и те словарные линии ресурсных остались после нескольких правок, но я не понимаю, почему, если они присутствуют, только первый элемент в представлении не будет отображать определенные стили.

Любые идеи?

Edit:

Я заметил, что мой IsSelected цвет фона не подхватили. Например, если я установил его в «Зеленый», выбранные элементы по-прежнему будут использовать выбранный по умолчанию цвет Windows.

ответ

2

Если бы эту проблему раньше, apperently выбранный цвет фона ListViewItem должен быть установлен с

<Style.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Black"/> 
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Gray"/> 
</Style.Resources> 

Я никогда не понимал причину этого .. Может быть, кто-то здесь может объяснить.

И для первой части, если вы поместите этот стиль в отдельный словарь ресурсов, он будет работать, как это. (Не знаю, почему вы получаете эффект вы получаете либо)

Dictionary1.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
     <Style.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/> 
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Gray"/> 
     </Style.Resources> 
     <Style.Triggers> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="IsMouseOver" Value="True" /> 
        <Condition Property="IsSelected" Value="False"/> 
       </MultiTrigger.Conditions> 
       <Setter Property="Background" Value="Red" /> 
      </MultiTrigger> 
     </Style.Triggers> 
    </Style> 
</ResourceDictionary> 

MainWindow

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Dictionary1.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 
<DockPanel Name="c_dockPanel"> 
    <ListView x:Name="listView"/> 
</DockPanel> 
Смежные вопросы