2017-02-07 8 views
0

ListViewを作成しようとしましたが、ホバーと選択スタイルはありませんが、ListViewItemの色が交互になります。私はItemContainerStyleを設定するスタイルを無効にするにはホバーなしで選択したスタイルがリストビューアイテムの色のスタイルを交互に使用するリストビュー

。問題は、私に語っWPF InspectorChristian Mosersとして表現ListView.AlternationIndexは何とかオールウェイズ0に評価されていることです。これにより、すべてのアイテムの背景色が赤色になります。

<ListView ItemsSource="{Binding Configuration}" AlternationCount="2" > 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListViewItem"> 
         <Border> 
          <Border.Style> 
           <Style TargetType="Border"> 
            <Style.Triggers> 
             <Trigger Property="ListView.AlternationIndex" Value="0"> 
              <Setter Property="Background" Value="Red" /> 
             </Trigger> 
             <Trigger Property="ListView.AlternationIndex" Value="1"> 
              <Setter Property="Background" Value="Blue" /> 
             </Trigger> 
            </Style.Triggers> 
           </Style> 
          </Border.Style> 

          <ContentPresenter /> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

どのように選択してホバースタイルを持たないアイテムに色を付けることができますか?

  • (最初の項目の背景色は、第2の青色の一再びように第三の赤色の赤色されるべきである)

  • (背景色、ボーダー、パディング、マージン及び答えてくれてありがとう:マウスがListViewItem上にあるかListViewItemが選択されている場合など)

EDITを変更しないでください。私は、Nameプロパティを取り除くために、ソリューションへのテンプレートバインディングを追加しました。

<ListView ItemsSource="{Binding Configuration}" AlternationCount="2" > 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Style.Triggers> 
       <Trigger Property="ListBox.AlternationIndex" Value="0"> 
        <Setter Property="Border.Background" Value="Red" /> 
       </Trigger> 
       <Trigger Property="ListBox.AlternationIndex" Value="1"> 
        <Setter Property="Border.Background" Value="Blue" /> 
       </Trigger> 
      </Style.Triggers> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListViewItem"> 
         <Border Background="{TemplateBinding Background}"> 
          <ContentPresenter Content="{TemplateBinding Content}"/> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 
+0

あなたは本当にただの選択スタイルを無効にするか、あなたが実際に選択機能を必要としないですか全く?アイテムの動的スタックを表示したいだけなら、 'ItemsControl'に戻すこともできます。 – grek40

+0

@ grek40選択機能が必要です – NtFreX

答えて

0

トリガーはコントロールテンプレート上にある必要があります。ボーダーはその親について何も知らない。

しかし、(背景)を設定するためのプロパティが国境上にあるため、あなたはそれに名前を付け、TargetNameはを使用する必要があります。 enter image description here

+0

この回答と私が投稿した回答との違いは何ですか?以前の回答を元に戻して、基本的に私のコピーを...したのはなぜですか? – mm8

+0

私はあなたをコピーしませんでした。私は質問を正しく読まなかったので私を削除しました。私はその後VSに行って別のソリューションをテストしましたが、これはあなたと同じように起こりました。これが、私のOPと実際のテストデータが結びついていない理由です。 – Kilazur

1

<ControlTemplate.Triggers>でトリガを入れて:

<ListView AlternationCount="2" > 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ListViewItem}"> 
         <Border Name="border"> 
          <ContentPresenter/> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
           <Setter Property="Background" TargetName="border" Value="Red" /> 
          </Trigger> 
          <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
          <Setter Property="Background" TargetName="border" Value="Blue" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListViewItem Content="ABC"/> 
    <ListViewItem Content="DEF"/> 
    <ListViewItem Content="GHI"/> 
    <ListViewItem Content="JKL"/> 
</ListView> 

このXAMLは、所望の結果を生成

<ListView ItemsSource="{Binding Configuration}" AlternationCount="2" > 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListViewItem"> 
         <Border x:Name="Border"> 
          <ContentPresenter /> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
           <Setter Property="Background" Value="Red" TargetName="Border" /> 
          </Trigger> 
          <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
           <Setter Property="Background" Value="Blue" TargetName="Border" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 
関連する問題