如何在UWP中为ComboBox启用自由文本

sla*_*oah 5 c# combobox uwp windows-10-universal

我在UWP应用程序中添加了一个ComboBox,我正在为Windows 10工作,我无法使用它,以便用户可以输入自由文本,如果他们需要的值与任何可用的值不匹配选择.

我怎样才能做到这一点?

根据MSDN,描述为ComboBox.IsEditable:

获取或设置一个值,该值启用或禁用编辑ComboBox文本框中的文本.

这似乎是需要的.但是,这似乎只适用于WPF.

它似乎没有IsEditableXAML上的可设置属性:

在XAML中是可编辑的

在后面的代码中,当我尝试访问此属性时,它显示该属性仅具有get并始终返回false:

IsEditable在代码背后

请让我知道如何才能实现这一目标.谢谢!

Mam*_*toh 5

我还没有尝试过,但这里是 UWP 上带有可编辑文本框的 ComboBox 的实现。

带有可编辑文本框的组合框

而且,基本上,自动建议选项与可编辑的组合框完全不同 - 自动建议只是建议当前项目列表中的候选项,但不接受输入新项目。要实现它,您需要像上面的人一样实现自定义用户控件。

添加于 2018 年 10 月- 从 Windows 10 October 2018 更新开始,ComboBox 现在具有 IsEditable 属性。哇!尚未详细记录,但这篇博客文章很有帮助。

XAML ComboBox IsEditable 和文本属性


And*_*é B 0

如果您的 UWP 应用程序在至少具有Anniversary Update, 版本的设备上运行,并且您已将UWP 项目的最低平台版本设置为至少Anniversary Update(版本 1607),则您将能够利用 Dependency Property IsTextSearchEnabled,通过设置该属性to True将允许您通过键入跳转到一个值。

问题是,您应该通过利用该类在代码隐藏中而不是在 XAML 中实例化它ApiInformation,从而防止您的应用程序在无法识别此依赖属性的较旧 Windows 10 版本上运行的情况。详情请点击这里

如果您的应用程序的最低目标版本是 Creators Update 版本,您还可以根据 . 条件XAML

定义一个自定义命名空间,它对应于一个条件方法,您可以在其中查询 UniversalApiContract 的第三个版本是否存在(此依赖项属性所需的最低限度)。

xmlns:contract3Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,3)"
Run Code Online (Sandbox Code Playgroud)

然后在您的组合框中,您可以执行以下操作:

<ComboBox contract3Present:IsTextSearchEnabled="True"/>
Run Code Online (Sandbox Code Playgroud)

仅当运行应用程序的设备具有所需的操作系统版本时,才会设置此依赖项属性!


与所讨论的完全不同的另一个解决方案是Custom Control您可以扩展ComboBox逻辑,为其实现文本搜索。您可以在获得焦点时监听按键ComboBox,并且可以根据按下的按键来命令收集。

  • `IsTextSearchEnabled` 只是让按键选择项目,它不允许用户按照要求输入自己的值。 (2认同)