2008-09-30 110 views
2

如何動態設置列表框中項目的背景顏色?即我的業務對象上還存在一些屬性,所以基於一些業務規則,我希望背景顏色有所不同?動態設置Silverlight控件的背景顏色(列表框)

 <ListBox Background="Red"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="Background" Value="Red"/> 
      </Style> 
     </ListBox.ItemContainerStyle> 
<ListBox.ItemTemplate> 
     <DataTemplate> 
        <StackPanel Orientation="Horizontal" 
           Margin="5"> 
         <TextBlock VerticalAlignment="Bottom" 
            FontFamily="Comic Sans MS" 
            FontSize="12" 
            Width="70" 
            Text="{Binding Name}" /> 
         <TextBlock VerticalAlignment="Bottom" 
            FontFamily="Comic Sans MS" 
            FontSize="12" 
            Width="70" 
            Text="{Binding Age}" /> 
        </StackPanel> 
       </DataTemplate> 
     </ListBox.ItemTemplate> 
     </ListBox> 

編輯:它說here

在Silverlight中,你必須添加X:關鍵 屬性自定義樣式和 引用它們的靜態資源。 Silverlight不支持使用TargetType 屬性值應用的隱式 樣式。

這是否會影響我的做法?

回答

0

@Matt感謝您的回覆。我會研究觸發器。

我唯一的問題是,用於確定行是否應該被着色的邏輯稍微有點複雜,所以我不能只檢查一個物業,所以我確實需要運行一些邏輯來確定顏色。有任何想法嗎?

我想我可以做一個UI對象的所有相關領域,我需要,但我還挺沒有想採取的做法。

1

要將後臺綁定到多個屬性,你可以使用IMultiValueConverter。它就像IValueConverter一樣,只是它可以與MultiBinding一起使用,將多個值傳遞給一個類並獲取單個值。

這裏有一個帖子,我發現與IMultiValueConverter和MultiBinding一個運行通過:

http://blog.paranoidferret.com/index.php/2008/07/21/wpf-tutorial-using-multibindings/

編輯:如果IMultiValueConverter不可用(它看起來像Silverlight不僅具有的IValueConverter),那麼你可以隨時通過你的整個綁定對象(例如你的Person對象)到一個IValueConverter,並使用它的各種屬性返回你的畫筆。

0

你可以嘗試在您的ControlTemplate中綁定的東西(即邊界或某物)到TemplateBackground。然後在你的列表框上設置背景以確定它的顏色。

<Border Margin="-2,-2,-2,0" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,0" CornerRadius="11,11,0,0">