问题标签 [combobox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WPF ListBox 或 ComboBox 中的 ItemActivated 事件
WPF ListBox 或 ComboBox 控件中是否存在 ItemActivated 事件(如在 Windows 窗体中)?我一个都看不到
没有一些事件做同样的事情似乎很疯狂——所以它只是换了个名字吗?如果没有,还有其他简单的方法吗?我看过各种关于此的博客文章,但它们似乎都涉及子类化控件和其他类似的东西。我确信 WPF 设计人员意识到这几乎是使用 ListBox 或 ComboBox 完成的最常见的事情!
我基本上是在寻找一个在激活项目时将触发的事件,告诉我哪个项目已激活并允许我访问该项目的属性。
c# - WPF 中类似于 FF3 AwesomeBar 的行为
我正在尝试在 WPF 中实现类似于 Firefox 3 AwesomeBar 的行为。我有一个 ComboBox 来使用 DataTemplate,它使下拉菜单看起来像 AwesomeBar 的下拉菜单,但我不确定如何获得正确的行为。
我想要发生的是让用户将他们的搜索输入到 ComboBox 的 TextBox 位中,然后逐渐缩小下拉列表中的结果。我想我可能可以让数据库查询部分工作(因为结果将来自数据库)但我想要得到的是用户开始输入时打开的下拉位(就像在 Firefox 中一样3) 然后自动选择列表中的第一个项目和列表中的其他项目,可以通过使用箭头键或单击它们来选择它们。
更新:
我现在找到了让 ComboBox 下拉的编程方式(使用 IsDropDownOpen = true),但我还有一些其他问题:
首先,当我输入某些内容时,它会下拉,但它不会选择与我正在输入的内容最接近的匹配项,其次,当我输入唯一选择一个项目的内容时,它会自动关闭并运行 SelectedItemChanged 方法。我希望它仅在我实际单击它或按 Enter 时关闭并运行代码(而不是仅使用向上或向下箭头进行选择)。任何想法如何让它做我想做的事?如果还不够清楚,我可以提供更多信息。
wpf - 是否有任何可用的原生 WPF 多选组合框?
即使是第 3 方也可以。
谢谢
c# - 从 ChildForm 添加数据后 ComboBox 刷新
将新数据添加到 Access 数据库后,我似乎无法刷新 ComboBox。
这是我用来添加新数据的代码:
c# - 如何动态更改 C# 组合框或文本框中的自动完成条目?
我在 C# 中有一个组合框,我想使用自动完成建议,但是我希望能够在用户键入时更改自动完成条目,因为可能的有效条目太多而无法AutoCompleteStringCollection
在启动时填充。
例如,假设我让用户输入名称。我有一个可能的名字列表(“Joe”、“John”)和一个姓氏列表(“Bloggs”、“Smith”),但如果我每个都有一千个,那么这将是一百万个可能的字符串 -太多,无法放入自动完成条目。因此,最初我只想将名字作为建议 ("Joe", "John") ,然后一旦用户输入了名字 ("Joe"),我想删除现有的自动完成条目并替换他们有一个新的集合,包括选择的名字和可能的姓氏(“Joe Bloggs”、“Joe Smith”)。为了做到这一点,我尝试了以下代码:
但是,这不能正常工作。似乎对 Clear() 的调用会导致自动完成机制“关闭”,直到下一个字符出现在组合框中,但是当然当下一个字符出现时,上面的代码再次调用 Clear(),所以用户永远不会实际上看到了自动完成功能。它还会导致组合框的全部内容被选中,因此在每次按键之间您必须取消选择现有文本,这使其无法使用。如果我删除对 Clear() 的调用,则自动完成工作,但似乎AddRange()
调用无效,因为我添加的新建议不会出现在自动完成下拉列表中。
我一直在寻找解决方案,并看到了各种建议,但我无法让它们中的任何一个工作 - 自动完成功能似乎被禁用,或者没有出现新字符串。这是我尝试过的事情的清单:
BeginUpdate()
在更改字符串之前和EndUpdate()
之后调用。- 调用
Remove()
所有现有字符串而不是 Clear()。 - 在我更新字符串时从组合框中清除文本,然后将其添加回来。
- 在我更改字符串时将其设置
AutoCompleteMode
为“None”,然后将其设置回“SuggestAppend”。 - 挂钩
TextUpdate
orKeyPress
事件而不是TextChanged
. - 每次都
AutoCompleteCustomSource
用新的替换现有的。AutoCompleteStringCollection
这些都没有帮助,即使是各种组合。 Spence建议我尝试覆盖ComboBox
获取要在自动完成中使用的字符串列表的函数。使用反射器,我在ComboBox
类中发现了一些看起来很有希望的方法 -GetStringsForAutoComplete()
和SetAutoComplete()
,但它们都是私有的,因此我无法从派生类访问它们。我不能再进一步了。
我尝试用 替换ComboBox
,TextBox
因为自动完成界面是相同的,我发现行为略有不同。它似乎工作得更好,因为TextBox
自动完成的附加部分工作正常,但建议部分没有 - 建议框短暂地闪烁,然后立即消失。
所以我想“好吧,我会在没有 Suggest 功能的情况下生活,而只使用 Append”,但是当我将其设置AutoCompleteMode
为 Append 时,我得到了访问冲突异常。Suggest 也会发生同样的事情 - 唯一不会引发异常的模式是SuggestAppend
,即使 Suggest 部分的行为不正确。
我认为使用 C# 托管代码时应该不可能出现访问冲突异常。 Avram建议我使用“锁定”来解决此问题,但我不知道我应该锁定什么 - 唯一具有 SyncRoot 成员的是AutoCompleteStringCollection
, 并且锁定不会阻止访问冲突异常。我也尝试锁定ComboBox
or TextBox
,但这也无济于事。据我了解, lock 只会阻止其他锁,所以如果底层代码没有使用 lock 那么我使用它不会有任何区别。
所有这一切的结果是我目前无法使用动态自动完成的 aTextBox
或 a 。ComboBox
有人对我如何实现这一目标有任何见解吗?
更新:
我还没有得到这个工作,但我发现了更多。也许其中一些会激发其他人提出解决方案。
我尝试用 替换ComboBox
,TextBox
因为自动完成界面是相同的,我发现行为略有不同。它似乎工作得更好,因为TextBox
自动完成的附加部分工作正常,但建议部分没有 - 建议框短暂地闪烁,然后立即消失。
所以我想“好吧,我会在没有 Suggest 功能的情况下生活,而只是使用 Append”,但是当我将其设置AutoCompleteMode
为 Append 时,我得到了访问冲突异常。Suggest 也会发生同样的事情 - 唯一不会引发异常的模式是SuggestAppend
,即使 Suggest 部分的行为不正确。
我认为在使用 C# 托管代码时应该不可能获得访问冲突异常,但无论如何,结果是我目前无法使用 aTextBox
或 aComboBox
任何类型的动态自动完成。有人对我如何实现这一目标有任何见解吗?
更新 2:
在尝试了各种其他事情(例如更改工作线程中的自动完成功能,并BeginInvoke()
用于模拟 PostMessage() 类型的行为之后,我终于放弃了,只是使用列表框实现了我自己的自动完成下拉菜单。它比内置的响应速度更快,而且我花在这方面的时间比我试图让内置的工作的时间少,所以任何想要这种行为的人的教训是 - 你可能会更好自己实施。
c# - 如何在 WPF 组合框中隐藏所选项目?
我想从打开的 WPF 组合框中隐藏选定的项目,基本上是为了显示而不是这个:
这:
如何才能做到这一点?
wpf - 为什么我不能在 ComboBox 中选择空值?
在 WPF 中,似乎不可能(用鼠标)从 ComboBox 中选择“null”值。编辑澄清一下,这是.NET 3.5 SP1。
这是一些代码来说明我的意思。首先,C# 声明:
接下来,我的 Window1 XAML:
最后,我的 Window1 类:
与我一起?我有一个 ComboBox,其项目绑定到 Bar 实例列表,其中一个为空。我已将窗口绑定到 Foo 的一个实例,并且 ComboBox 正在显示其 Bar 属性的值。
当我运行这个应用程序时,ComboBox 以空显示开始,因为 Foo.Bar 默认为空。没关系。如果我使用鼠标将 ComboBox 放下并选择“Hello”项目,那也可以。但是,如果我尝试重新选择列表顶部的空项目,ComboBox 将关闭并返回其先前的“Hello”值!
使用箭头键选择空值按预期工作,并且以编程方式设置它也可以工作。它只是用不起作用的鼠标进行选择。
我知道一个简单的解决方法是拥有一个表示 null 的 Bar 实例并通过 IValueConverter 运行它,但是有人可以解释为什么用鼠标选择 null 在 WPF 的 ComboBox 中不起作用吗?
c# - 控制在数据绑定 WPF ComboBox 的文本框部分显示哪个字段
我在 WPF 中有一个 ComboBox,它是数据绑定的,并且有一个数据模板来控制每个项目的显示方式。我已经做到了,每个项目都显示有两位文本(用于名称和路径属性)和一个图像(用于图标属性)。
当我从 ComboBox 中选择一个项目时,ComboBox 的文本框位只是更改为“TestWPF.Result”,这是我填充 ComboBox 的类的名称。
我对两件事中的一件(或两件)感兴趣:
如何更改它以显示其中一个字段的值(例如,它显示名称字段的值而不是类的名称)?
是否有可能让它在项目列表中使用相同的 DataTemplate,这样一旦我选择了一个项目,它就会以与项目列表中相同的方式显示在关闭的 ComboBox 中。基本上我有一个名为 ShowResults 的 DataTemplate 和一个使用该模板的 ComboBox。我还添加了一个单独的 ContentControl,我必须在 ComboBox 中显示所选项目的详细信息,但我想用它来替换 ComboBox 中的文本框。
更新:
感谢您的第一个答案。正如您所描述的,我尝试使用单独的 ContentControl,它工作正常。现在的问题是如何用这个 ContentControl 替换 ComboBox 的文本框部分。对此的任何提示都将受到欢迎。
此外,是否可以用 ContentControl 和文本框的混合替换 ComboBox 控件的文本框位,这样我仍然可以在文本框中键入以帮助从 ComboBox 中选择项目,但是当我关闭下拉列表时,其余的ContentControl 位将填充其余的文本和图标。希望这是有道理的 - 如果没有,请提出问题!
代码:
我被要求发布我的代码 - 所以就在这里。我试图删除我知道绝对不相关的东西,但我不确定到底什么是相关的,所以当有疑问时,我会把东西留在里面。
wpf - ListBox 中的所有 ComboBox 在其中任何一个更改时都会更改
我有一个ListBox
绑定到ObservableCollection
自定义类型的表单。在每个项目中都有ComboBox
一个枚举类型的绑定。窗口加载时,所有ComboBox
es 都默认为某个值。当我SelectedItem
为任何一个(从 UI,而不是代码)更改 es 时,所有其他ComboBox
es 都更改为相同的SelectedItem
.
我不确定我做错了什么,这是我当前正在处理的 XAML。
和ListBox
:
我尝试了一些不同的选项,例如绑定到 a CollectionView
; 但是似乎没有任何效果。谁能指出我的错误?
谢谢!
c# - 文本中任意位置的 WPF 中 ComboBox 的自动完成(不仅仅是开始)
我在 WPF 中有一个 ComboBox,我用过很多次(它有一个自定义模板和一个自定义项模板)。我现在已经达到了它几乎可以按照我想要的方式工作的地步,除了当我在 ComboBox 中键入时,它正在为我进行过滤,但仅在假设我键入的内容开始时进行过滤组合框。
例如,如果我在 ComboBox 中有一个名为“Windows Media Player”的项目,它只会在我开始输入“Windows Media ...”时找到它,如果我开始输入“Media Play...”,它将找不到它. 有没有办法解决?我可以在某处设置一个属性来告诉它在整个字符串中搜索,而不仅仅是使用 StartsWith() 吗?
如果没有,最好的方法是让我自己做到这一点?有什么方法可以获取原始控制权,基本上只是将对 StartsWith() 的调用更改为对 Contains() 的调用,还是我必须走得更底层?