繁体   English   中英

如何让wpf组合框拉出一个特殊的属性

[英]How to make wpf combo box pull a special property

我想使用组合框输入一个普通的整数值。

在我的应用程序中,某些数值具有特殊含义,但必须能够输入任何数值(键入)。

因此,组合框必须显示一个编辑字段,右侧有一个下拉箭头。

如果单击下拉箭头,则下拉列表必须显示具有特殊含义的特殊数值的解释 (字符串)列表(例如"103 - Wait for next turn" )。

如果用户单击下拉列表中的条目(而不是直接键入相应的值),则必须将相应的数值传送到编辑字段。

我尝试过以下方法:

  • 我将ComboBox的IsEditable属性设置为true
  • 我将ItemsSource属性绑定到一个对象集合,这些对象具有一个数字属性(名为"Value" )和一个字符串属性(名为"Explanation" )。
  • 我将DisplayMemberPath属性设置为"Explanation" (上面的字符串属性的名称)

有了这个,我可以自由输入我喜欢的任何数字,并在下拉列表中正确显示每个特殊数字的字符串说明。 这正是我想要的。

但是,当我从下拉列表中选择一个解释时,它是转移到编辑字段的解释字符串 ,而不是相应的数值。

问题:当我从下拉列表中单击某个项目时,如何使组合框传输数字属性( "Value" )而不是解释文本?

使用数据模板在drowp-down中显示说明文本。

要在文本编辑字段中显示值,请将ComboBox的附加属性TextSearch.TextPath设置为“特殊值”类型中value属性的名称。

如果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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM