Привязка данных к цвету в шаблоне данных WPF - PullRequest
1 голос
/ 11 октября 2011

Этот уже давно меня беспокоит, и я не могу заставить его работать. Я использую шаблон данных для форматирования элементов в элементе управления 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 такой же привязкой из прямоугольника * Атрибут 1008 *, как показано выше, приводит к исчезновению границы (опять же, без ошибок привязки).

Как правильно добиться привязки цвета в WPF?

1 Ответ

3 голосов
/ 11 октября 2011

Ничего плохого в этом коде, неисправность должна быть в преобразователе.Возможно, он получает цвет, но устанавливает альфа-канал на 0, делая все цвета полностью прозрачными.Если это не так, вы должны опубликовать код конвертера, чтобы люди могли посмотреть его.

Также вы можете легко обойтись без конвертеров:

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