2010-02-03 72 views
1

我想要一个组合框,允许从值列表中进行选择,并允许从文本中输入自定义值。由于显示原因,这些项目是复杂类型(可以说组合框项目模板显示一个颜色补丁和一个标志,指示它是否是自定义颜色)。如何使用自定义值编辑WPF组合框

public class ColorLevel 
{ 
    public decimal Intensity { get; set; } 
    public bool IsCustom { get; set; } 
    public Color BaseColor { get; set; } 
    public override ToString() { return string.Format("{0}", Intensity*100); } 
} 

例项

var items = new [] { 
    new ColorLevel { Intensity = 0.9m, IsCustom = false, BaseColor = Color.Red }, 
    new ColorLevel { Intensity = 0.7m, IsCustom = false, BaseColor = Color.Red } 
} 

XAML

<ComboBox SelectedItem="{Binding Path=SelectedColorLevel}" 
      IsEditable="true" IsTextSearchEnabled="true"> 
</ComboBox> 

所以当从项目列表中选出的项目以上的标记起作用。当你用文字搜索键入时,选择匹配的项目。如果输入的文本与项目不匹配,则SelectedColorLevel设置为null。

问题是什么时候(以及如何)最好创建一个新的自定义项目,当输入的文本与项目不匹配时可以将其设置为SelectedColorLevel。

例如,我想到一个新的项分配给所选择的值,如

new ColorLevel { Intensity = decimal.Parse(textvalue), IsCustom = true } 

或使用适当的转换器和数据绑定到文本属性。

回答

0

不知道我是否完全理解.. 您可以使用KeyDown事件来添加新的ColorLevel,例如按下Return键时。 如果项目是ObservableCollection并将其设置为ComboBox的ItemsSource,则添加到项目中的新ColorLevel应该在列表中可用,并成为SelectedItem。