none
ListViewのItem選択時と選択が外れた時の色を同じにしたい RRS feed

  • 質問

  • こんばんは。

    タイトルにあるようにListView選択時の色とフォーカスが外れた時の色を同じにしたいのですが
    どのようにすればいいのかがわかりません。
    理由としてコンテキストメニュー表示等でフォーカスが外れると選択された箇所の色が
    非アクティブ色になるのでそれをアクティブ色にしたいのです。

    以上、よろしくお願いします。

    2010年7月8日 16:49

回答

  • トリガーで設定しておけば大丈夫そうですよ。

    (参考)
    方法 : トリガーを使用して、ListView で選択された項目のスタイルを設定する
    http://msdn.microsoft.com/ja-jp/library/ms743015.aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク 山本春海 2010年7月14日 1:49
    2010年7月9日 2:18
    モデレータ
  • うちではひとつ前の「2010年7月9日 4:26」(表示はGMTなのかな)の返信の状態で動作しています。

    ということはどこかに ListView や GridView に対する Style や Template があってそれが邪魔しているんだと思います。
    調査して一時的にでもコメントにして実験してみてください。

     


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    • 回答としてマーク __test__ 2010年7月13日 19:29
    2010年7月11日 6:17

すべての返信

  • トリガーで設定しておけば大丈夫そうですよ。

    (参考)
    方法 : トリガーを使用して、ListView で選択された項目のスタイルを設定する
    http://msdn.microsoft.com/ja-jp/library/ms743015.aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク 山本春海 2010年7月14日 1:49
    2010年7月9日 2:18
    モデレータ
  • 返信、ありがとうございます。

    以下のようにやってみましたが上手くいきませんでした…。

    <Style.Triggers>
      <MultiTrigger>
        <MultiTrigger.Conditions>
          <Condition Property="IsSelected" Value="true" />
          <!--<Condition Property="Selector.IsSelectionActive" Value="true" />-->
        </MultiTrigger.Conditions>
        <Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
      </MultiTrigger>
    </Style.Triggers>
    
    

    何が不十分なのでしょうか?

    以上、よろしくお願い致します。

    2010年7月9日 2:47
  • おかしいですね?? ご提示された同じコードをこちらで試す限り、ListViewからフォーカスが外れても背景色(青っぽい色)を保っているんですが・・・
    ご質問の意味を取り違えているかな?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年7月9日 3:00
    モデレータ
  • 報告していただいた内容にあれれ?と思いましたのでWindowsXPと7の環境で試してみました。
    しかし依然として非アクティブ色(グレーっぽい色)になってしまいます。
    コードは以下のよう記述しました。

      <Window.Resources>
        <Style TargetType="{x:Type ListViewItem}">
          <Style.Triggers>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsSelected" Value="true" />
                <!--<Condition Property="Selector.IsSelectionActive" Value="true" />-->
              </MultiTrigger.Conditions>
              <Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
            </MultiTrigger>
          </Style.Triggers>
        </Style>
      </Window.Resources>
      <Grid>
        <ListView ItemsSource="{Binding Persons}"
             IsSynchronizedWithCurrentItem="True">
          <ListView.ContextMenu>
            <ContextMenu>
              <MenuItem Header="この人を表示" Command="{Binding ShowCommand}" CommandParameter="{Binding Persons.CurrentItem}" />
            </ContextMenu>
          </ListView.ContextMenu>
    
          <ListView.View>
            <GridView>
              <GridViewColumn Header="名前" DisplayMemberBinding="{Binding Name}"/>
              <GridViewColumn Header="年齢" DisplayMemberBinding="{Binding Age}"/>
            </GridView>
          </ListView.View>
        </ListView>
      </Grid>
    </Window>
    
    
    以上、よろしくお願いします。
    2010年7月9日 4:26
  • 以下を参考にして、ItemContainerStyleに設定して下さい。

    【WPF】ListViewの行(Item)の見た目を変えちゃえ!
    http://pro.art55.jp/?eid=878658


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年7月9日 15:22
    モデレータ
  • 返信ありがとうございます。

    ItemContainerStyleを設定してみましたが依然として状況は同じです。

    少し調べてみると以下のようにして色を変更してる方がいました。

    <Style TargetType="ListBoxItem">
      <Style.Resources>
        <!--SelectedItem without focus-->
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue" Opacity=".4"/>
      </Style.Resources>
    </Style>
    
    

    確かに色は変わるのですがこれをアクティブ色である{x:Static SystemColors.HighlightBrush}とすると例外が出て変更出来ませんでした。
    何か良い方法はないものでしょうか?

    以上、よろしくお願いします。

    2010年7月9日 17:45
  • うちではひとつ前の「2010年7月9日 4:26」(表示はGMTなのかな)の返信の状態で動作しています。

    ということはどこかに ListView や GridView に対する Style や Template があってそれが邪魔しているんだと思います。
    調査して一時的にでもコメントにして実験してみてください。

     


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    • 回答としてマーク __test__ 2010年7月13日 19:29
    2010年7月11日 6:17
  • 返信、ありがとうございます。

    了解しました。

    他の方の環境では正常との事ですので回答マークを付けさせて頂きます。

    2010年7月13日 19:28