这个一直困扰着我一段时间,我似乎无法让它发挥作用。我正在使用数据模板来格式化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的绑定?
答案 0 :(得分:3)
该代码没有错,故障必须与转换器有关。也许它获得颜色但将alpha通道设置为0,使所有颜色完全透明。如果不是这样,你应该发布转换器的代码,以便人们可以查看它。
此外,您可以在没有任何转换器的情况下轻松过关:
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}"/>
</Rectangle.Fill>