2011-10-10 136 views
1

這個問題一直在困擾着我一段時間,我似乎無法讓它工作。我使用的是數據模板的ListBox控件中格式化的項目,就像這樣:在WPF DataTemplate中數據綁定顏色

<ListBox HorizontalAlignment="Stretch" Name="listBox1" VerticalAlignment="Stretch" Grid.ColumnSpan="3" Grid.Row="1"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="30" /> 
        <ColumnDefinition Width="30" /> 
        <ColumnDefinition Width="100*" /> 
       </Grid.ColumnDefinitions> 
       <Rectangle Width="30" Height="10" Grid.Column="0" 
        VerticalAlignment="Stretch" 
        HorizontalAlignment="Stretch" 
        Fill="{Binding Path=Color, 
         Converter={StaticResource SolidColorBrushConverter}, 
         Mode=OneWay}" /> 
       <CheckBox Grid.Column="1" 
        VerticalAlignment="Center" 
        HorizontalAlignment="Center" 
        IsChecked="{Binding Path=Selected}" /> 
       <Label Grid.Column="2" VerticalAlignment="Center" 
        Content="{Binding Path=Name}" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

的問題是,矩形不與綁定的顏色出現,因爲它應該。跟蹤轉換器,綁定似乎從綁定項目中正確地獲取顏色(複選框上的其他綁定和標籤按預期工作)。另外,我在調試輸出中沒有發生綁定錯誤。

我還試圖在與黑色邊框,其正確地示出了<border>元件包裹所述矩形,所以我知道該矩形至少顯示出來,但是在更換BorderBrush屬性與從矩形的Fill屬性相同的結合如圖所示以上導致邊界消失(再次,沒有綁定錯誤)。

如何正確實現WPF中Color的綁定?

+0

我想'SolidColorBrushConverter'的輸入值已經轉換到合適的'Brush'實例? – Amry

回答

3

該代碼沒有錯,故障必須與轉換器。也許它得到的顏色,但將alpha通道設置爲0,使所有顏色完全透明。如果不是這樣,你應該發佈轉換器的代碼,以便人們可以看看它。

您也可以無需任何轉換器輕鬆獲得通過:

<Rectangle.Fill> 
    <SolidColorBrush Color="{Binding Color}"/> 
</Rectangle.Fill> 
+0

我原本試圖按照你所說的去做,沒有轉換器,但轉換器至少讓我看看傳遞的值。不透明度是問題。謝謝! – Josh