您好我的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;
}
答案 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>