2015-09-05 45 views
-1

在主,我下面的:如何動態更改GridViewColumn的背景顏色?

List<Person> items = new List<Person>(); 
    Person p = new Person() { NameP = "Samantha", Gen = true, Feb = true, Mar = false, Apr = false, Mag = false, Lug = false, Ago = false, Set = false, Ott = false, Nov = false, Dic = false }; 
    items.Add(new Person() { NameP = "Jack", Gen = true, Feb = true, Mar = true, Apr = true, Mag = false, Lug = false, Ago = false, Set = false, Ott = false, Nov = false, Dic = false }); 
    listView.ItemsSource = items; 

如果一個人是一個字符串NameP和12布爾,一爲一個月構成的一類。

我設法看到他們在一個ListView的GridView內部。結果如下: enter image description here

現在,我必須改變所有「真實」的項目的黃色背景,我不知道。這是xaml代碼:

<ListView x:Name="listView" Height="144"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Width ="150" Header="NAMEP" DisplayMemberBinding="{Binding NameP}"/> 
        <GridViewColumn Width ="50" Header="GEN" DisplayMemberBinding="{Binding Gen}"/> 
        <GridViewColumn Width ="50" Header="FEB" DisplayMemberBinding="{Binding Feb}"/> 
        <GridViewColumn Width ="50" Header="MAR" DisplayMemberBinding="{Binding Mar}"/> 
        <GridViewColumn Width ="50" Header="APR" DisplayMemberBinding="{Binding Apr}"/> 
        <GridViewColumn Width ="50" Header="MAG" DisplayMemberBinding="{Binding Mag}"/> 
        <GridViewColumn Width ="50" Header="GIU" DisplayMemberBinding="{Binding Giu}"/> 
        <GridViewColumn Width ="50" Header="LUG" DisplayMemberBinding="{Binding Lug}"/> 
        <GridViewColumn Width ="50" Header="AGO" DisplayMemberBinding="{Binding Ago}"/> 
        <GridViewColumn Width ="50" Header="SET" DisplayMemberBinding="{Binding Set}"/> 
        <GridViewColumn Width ="50" Header="OTT" DisplayMemberBinding="{Binding Ott}"/> 
        <GridViewColumn Width ="50" Header="NOV" DisplayMemberBinding="{Binding Nov}"/> 
        <GridViewColumn Width ="50" Header="DIC" DisplayMemberBinding="{Binding Dic}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 

感謝您的建議。

可能重複的....:不,我需要dinamically改變顏色,而不是靜態的方式爲這標誌着我的問題要求作爲複製

+0

[設置欄背景中可能重複WPF ListView/Gridview](http://stackoverflow.com/questions/1379902/setting-column-background-in-wpf-listview-gridview) –

+0

@ C-PoundGuru不,它不是重複的。我需要改變顏色dinamically,而不是按照你的問題要求的靜態方式 –

+0

[如何設置WPF GridView中列的背景顏色](http://stackoverflow.com/questions/17863607/how -to-設定的背景色對的一列式-gridview的-的-WPF)? –

回答

1

你可以寫樣式列表視圖

撰寫的風格,凸顯ListViewItems

   <Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}" Value="True"> 
          <Setter Property="Background" Value="Yellow" /> 
         </DataTrigger> 
        </Style.Triggers> 
        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}"/> 
       </Style> 
      </ListView.Resources> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Id}" Width="50"/> 
        <GridViewColumn Header="Date" DisplayMemberBinding="{Binding ItemID}" Width="auto" /> 
        <GridViewColumn Header="ShipCity" DisplayMemberBinding="{Binding ItemSerialNumber}" Width="auto"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 

Highlighting-Items-in-a-WPF-ListView

+0

它不工作...我讀你的鏈接,但它崩潰!我在ListView中寫了「Binding Gen」和Value =「Red」和 ItemContainerStyle =「{StaticResource ItemContStyle}」... –

+1

@JoeMatt我更新了代碼,它使用了一個黑客檢查字符串,如果你願意的話可以寫轉換器。它有一個小問題,它設置所有列的顏色:( –

1

您可以使用轉換器的布爾值轉換成合適的背景

<GridViewColumn Width ="50" Header="GEN" > 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
       <TextBlock Text="{Binding Path=Gen}" Background="{Binding Gen, Converter={StaticResource BackgroundConverter}}" /> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

轉換器看起來像App.Resources這個

class BackgroundConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value != null && value is bool && (bool)value) 
     { 
      return Application.Current.FindResource("ActiveBrush"); 
     } 

     return Application.Current.FindResource("DefaultBrush"); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

<SolidColorBrush x:Key="DefaultBrush" Color="Red" /> 
<SolidColorBrush x:Key="ActiveBrush" Color="Yellow" />