WPF数据绑定制作颜色选择器

时间:2017-09-27 12:02:28

标签: c# wpf data-binding colors

您好我的WPF颜色选择器工作正常。我认为这是因为我以错误的方式起诉数据绑定,但我不确定,因为我不完全理解它。

我想要的是一个下拉列表,其中包含列表中的颜色(包含显示实际颜色而不仅仅是文本)。

继承我的守则:

WPF:

<ComboBox Name="cb_farbe" Text="farbe" HorizontalContentAlignment="Center" IsEditable="True" Grid.Row="7" Grid.Column="1" VerticalAlignment="Center" Grid.ColumnSpan="2" Loaded="CbFarbe">

        <ComboBox.ItemTemplate>
            <DataTemplate>
                <Rectangle Grid.Column="0" Margin="5, 10" Fill="{Binding}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>

    </ComboBox>

C#:

private void CbFarbe(object sender, RoutedEventArgs e)
    {


        List<Color> colors = new List<Color>
        {
           Color.Blue,
           Color.Green,
           Color.LightBlue,
           Color.Black,
           Color.White,
           Color.Gray
        };

        var comboBox = sender as ComboBox;

        comboBox.ItemsSource = colors;

        comboBox.SelectedIndex = 1;

        this.DataContext = colors;

    }

3 个答案:

答案 0 :(得分:2)

这是一个纯XAML解决方案。请注意,您还必须设置矩形的宽度和高度:

<ComboBox SelectedIndex="0">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Rectangle Margin="5,10" Width="20" Height="20" Fill="{Binding}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
    <SolidColorBrush>Blue</SolidColorBrush>
    <SolidColorBrush>Green</SolidColorBrush>
    <SolidColorBrush>LightBlue</SolidColorBrush>
    <SolidColorBrush>Black</SolidColorBrush>
    <SolidColorBrush>White</SolidColorBrush>
    <SolidColorBrush>Gray</SolidColorBrush>
</ComboBox>

请注意,ComboBox的SelectedItem属性将返回SolidColorBrush。如果您确实想要Color,请设置

<ComboBox ... SelectedValuePath="Color">

并通过SelectedValue属性获取颜色。

答案 1 :(得分:1)

Fill上的Rectangle属性属于System.Windows.Media.Brush类型。我怀疑你会在控制台输出中看到绑定错误,试图将System.Drawing.Color绑定到它。

所以你需要的是一个System.Windows.Media.Brush对象。您必须更改要绑定的集合,或者您可以在XAML中构建画笔:

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

在这种情况下,您将绑定到List<System.Windows.Media.Color>

答案 2 :(得分:0)

您可以将Background的{​​{1}}设置为ComboBoxItem

SolidColorBrush
<ComboBox Name="cb_farbe" Text="farbe" HorizontalContentAlignment="Center" IsEditable="True" Grid.Row="7" 
                  Grid.Column="1" VerticalAlignment="Center" Grid.ColumnSpan="2" Loaded="CbFarbe">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="VerticalContentAlignment" Value="Stretch" />
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="{Binding}" />
                </Setter.Value>
            </Setter>
        </Style>
    </ComboBox.ItemContainerStyle>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>

</ComboBox>