次の方法で共有


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

質問

2010年7月8日木曜日 16:49

こんばんは。

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

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

すべての返信 (8)

2010年7月9日金曜日 2:18 ✅回答済み

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

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

★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/


2010年7月11日日曜日 6:17 ✅回答済み

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

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

 

えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12


2010年7月9日金曜日 2:47

返信、ありがとうございます。

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

<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日金曜日 3:00

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

★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/


2010年7月9日金曜日 4:26

報告していただいた内容にあれれ?と思いましたので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日金曜日 15:22

以下を参考にして、ItemContainerStyleに設定して下さい。

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

★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/


2010年7月9日金曜日 17:45

返信ありがとうございます。

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月13日火曜日 19:28

返信、ありがとうございます。

了解しました。

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