2014-11-23 93 views
0

我在我的窗口中有一個ListView綁定到List,現在我想根據該行的值更改特定行的樣式。比方說,我希望在其中具有特定值的行具有灰色背景。我怎樣才能做到這一點?如何更改WPF中的ListView中的特定行的樣式

<ListView Margin="0 10 0 0" 
      Height="205" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Top" 
      Width="270" 
      Name="ElevationList"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Story" 
      DisplayMemberBinding="{Binding Path=El}" 
      Width="100"/> 
     </GridView> 
    </ListView.View> 
</ListView> 
+0

根據結果的數量,你可以使用自定義的'IValueConverter'。 – Unflux 2014-11-23 23:14:24

回答

1

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" 
    xmlns:sampleApp="clr-namespace:WpfApplication1"> 
<Window.Resources> 
    <sampleApp:NumberToBGColorConverter x:Key="NumberBGConverter"/> 
</Window.Resources> 
<Grid> 
    <ListView ItemsSource="{Binding ListViewItems}"> 
     <ListView.ItemTemplate> 
      <DataTemplate DataType="{x:Type sampleApp:Number}"> 
       <Grid Background="{Binding NumberValue,Converter={StaticResource NumberBGConverter}}" Height="20" Width="250"> 
        <TextBlock Text="{Binding NumberValue}" FontWeight="SemiBold"/> 
       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</Grid> 

C#代碼:

public partial class MainWindow : Window 
{ 
    private List<Number> m_ListViewItems; 

    public List<Number> ListViewItems 
    { 
     get { return m_ListViewItems; } 
     set { m_ListViewItems = value; } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     ListViewItems = new List<Number>(); 
     ListViewItems.Add(new Number() { NumberValue = 1 }); 
     ListViewItems.Add(new Number() { NumberValue = 2 }); 
     ListViewItems.Add(new Number() { NumberValue = 3 }); 
     ListViewItems.Add(new Number() { NumberValue = 4 }); 
    } 
} 

public class Number 
{ 
    private int m_NumberValue; 

    public int NumberValue 
    { 
     get { return m_NumberValue; } 
     set { m_NumberValue = value; } 
    } 
} 

public class NumberToBGColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var number = (int)value; 

     if (number % 2 == 0) 
      return "Gray"; 
     else 
      return "Yellow"; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

非常感謝。 – Vahid 2014-11-24 07:54:09

相關問題