我想使用组合框来输入普通整数值。
在我的应用程序中,一些数值具有特殊含义,但任何数值都必须能够输入(键入)。
因此,组合框必须显示一个带有右侧下拉箭头的编辑字段。
如果单击下拉箭头,下拉菜单必须为那些具有特殊含义的特殊数值(例如 "103 - Wait for next turn"
)显示一个解释(字符串)列表。
如果用户从下拉列表中单击一个条目(而不是直接输入相应的值),则必须将相应的数值传输到编辑字段。
我尝试了以下方法:
- 我设置了 ComboBox 的
IsEditable
属性为真 - 我绑定(bind)
ItemsSource
属性到同时具有数字属性(名为"Value"
)和字符串属性(名为"Explanation"
)的对象集合。 - 我设置了
DisplayMemberPath
属性(property)"Explanation"
(上面字符串属性的名称)
有了它,我可以随意输入任何我喜欢的数字,每个特殊数字的字符串解释都正确地显示在下拉列表中。这正是我想要的。
但是,当我从下拉列表中选择一个解释时,解释字符串被传送到编辑字段,不是相应的数值.
问题:当我从下拉列表中单击一个项目时,如何让组合框传递数字属性("Value"
)而不是解释文本?
最佳答案
使用数据模板在下拉列表中显示说明文本。
要在文本编辑字段中显示值,请设置附加属性 TextSearch.TextPath
将 ComboBox 更改为“特殊值”类型中值属性的名称。
如果 ComboBox 在输入数字时不应自动完成可能的特殊值,请将其 IsTextSearchEnabled
属性设置为 false。 (请注意,如果您碰巧在编辑字段中输入了一个特殊值,这也会禁用在下拉列表中自动选择一个特殊值。)
ComboBox 的定义应该类似于这样:
<ComboBox ItemsSource="{Binding ...}"
IsEditable="True"
TextSearch.TextPath="Value"
IsTextSearchEnabled="False">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Explanation}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
关于c# - 如何使 wpf 组合框拉出特殊属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53309524/