在WPF DataTemplate中对颜色进行数据绑定

时间:2011-10-10 21:56:51

标签: c# wpf xaml data-binding datatemplate

这个一直困扰着我一段时间,我似乎无法让它发挥作用。我正在使用数据模板来格式化ListBox控件中的项目,如下所示:

<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的绑定?

1 个答案:

答案 0 :(得分:3)

该代码没有错,故障必须与转换器有关。也许它获得颜色但将alpha通道设置为0,使所有颜色完全透明。如果不是这样,你应该发布转换器的代码,以便人们可以查看它。

此外,您可以在没有任何转换器的情况下轻松过关:

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