如何通过ComboBox选中的颜色设置WPF中Ellipse的填充/背景色
错误原因
- 绑定源配置错误:
{Binding ComboboxCOLOR}默认绑定的是当前窗体DataContext下的ComboboxCOLOR属性,而非你定义的ComboBox控件 - 取值路径错误:ComboBox的ItemsSource是反射Colors类得到的
PropertyInfo对象集合,选中项本身不是颜色值,需要取其Name属性才能得到对应的颜色名称,WPF内置类型转换器可自动将合法颜色名称转换为Fill属性需要的画刷对象
解决方案
方案1:仅修改Ellipse绑定(无需修改其他代码)
直接调整Ellipse的Fill绑定,指定绑定源为ComboBox控件,取值路径为选中项的Name属性:
<Ellipse Fill="{Binding SelectedItem.Name, ElementName=ComboboxCOLOR}" Name="Ellipse" Margin="5" Height="40" Width="40" Stroke="Black" StrokeThickness="5"> </Ellipse>
方案2:搭配SelectedValuePath优化绑定(可维护性更好)
第一步给ComboBox添加SelectedValuePath属性,指定选中值默认取Name属性:
<ComboBox Name="ComboboxCOLOR" Height="25" Width="180" SelectedValuePath="Name"> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Rectangle Fill="{Binding Name}" Width="16" Height="16"/> <TextBlock Text="{Binding Name}" /> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
第二步修改Ellipse的Fill绑定为绑定ComboBox的SelectedValue:
<Ellipse Fill="{Binding SelectedValue, ElementName=ComboboxCOLOR}" Name="Ellipse" Margin="5" Height="40" Width="40" Stroke="Black" StrokeThickness="5"> </Ellipse>
两种方案都不需要修改后台C#构造函数代码,修改后即可实现选中ComboBox颜色同步填充Ellipse的效果。
内容的提问来源于stack exchange,提问作者TdW
相关产品推荐
相关产品推荐

