Combobox WPF:可编辑组合框和字符串格式

Combobox WPF:可编辑组合框和字符串格式,combobox,units-of-measurement,string-formatting,Combobox,Units Of Measurement,String Formatting,(首先,我简化了示例以便您理解。) 我想要一个可编辑的组合框,以英寸为单位显示值原始(源)值是以像素为单位的值,因为这是应用程序内部工作的单位。用户不应该看到以像素为单位的值,而是以英寸(UI的测量单位)为单位的值。我决定我必须使用一个转换器将像素转换成英寸,反之亦然 组合框项目的格式也应为“{0}in” 应该是这样的 [ 4 in |v] [ 1 in ] [ 2 in ] [ 3 in ] [ 4 in ] 但是,请记住,在内部,它应该以像素为单位工作!并且是可编

(首先,我简化了示例以便您理解。)

我想要一个可编辑的组合框,以英寸为单位显示值原始(源)值是以像素为单位的值,因为这是应用程序内部工作的单位。用户不应该看到以像素为单位的值,而是以英寸(UI的测量单位)为单位的值。我决定我必须使用一个转换器将像素转换成英寸,反之亦然

组合框项目的格式也应为“{0}in”

应该是这样的

[ 4 in  |v]
  [ 1 in  ]
  [ 2 in  ]
  [ 3 in  ]
  [ 4 in  ]
但是,请记住,在内部,它应该以像素为单位工作!并且是可编辑的。这是工作部分。我完全无法做到这一点

到目前为止,我有:

  <ComboBox IsEditable="True"
            ItemStringFormat="'{}{0} in}'"                  
            Text="{Binding RelativeSource={RelativeSource Self}, Path=SelectedValue, Mode=TwoWay, Converter={StaticResource MyPixelToInchesConverter}, StringFormat='{}{0} in}'}">
            <system:Double>1</system:Double>
            <system:Double>2</system:Double>
            <system:Double>3</system:Double>
  </ComboBox>

1.
2.
3.
问题出在哪里?选择项目时,该项目未格式化。当您在组合框的可编辑区域中写入数字时,它也不会格式化

那么,即使用户输入了一个不存在的值,组合框格式化项目的最佳方式是什么呢


谢谢

可能有点晚了,但我发现将
Text
属性设置为使用绑定是可行的,有点麻烦。在我的例子中,我使用的是货币价值,但同样的原则也应该适用

Text = {Binding Path=Indemnity, StringFormat=C0}
但是,输入不在列表中的文本值仍然会出现问题,即
StringFormat
未应用(出于某些奇怪的原因,只有设计此项的MS人员知道)

为了解决这个问题,我添加了一个
LostFocus
处理程序,该处理程序只需写入一个不正确的值,然后再次写入正确的值-在哪个阶段应用
StringFormat

private void IndemnityCombo_LostFocus(object sender, RoutedEventArgs e)
{
    var vm = this.DataContext as RatesViewModel;    // A view model class
    if (vm != null) {
        decimal indemnity = vm.Indemnity;
        vm.Indemnity = indemnity + 1M;
        vm.Indemnity = indemnity;
    }
}
它不优雅,但对我来说很合适。希望能对其他用户有所帮助