Combobox WPF:可编辑组合框和字符串格式
(首先,我简化了示例以便您理解。) 我想要一个可编辑的组合框,以英寸为单位显示值原始(源)值是以像素为单位的值,因为这是应用程序内部工作的单位。用户不应该看到以像素为单位的值,而是以英寸(UI的测量单位)为单位的值。我决定我必须使用一个转换器将像素转换成英寸,反之亦然 组合框项目的格式也应为“{0}in” 应该是这样的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 ] 但是,请记住,在内部,它应该以像素为单位工作!并且是可编
[ 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;
}
}
它不优雅,但对我来说很合适。希望能对其他用户有所帮助