【问题标题】:WinRT XAML ComboBox opens in middle of listWinRT XAML ComboBox 在列表中间打开
【发布时间】:2014-09-28 20:01:10
【问题描述】:

因此,WinRT 中 XAML 组合框的一个特殊行为让我非常头疼,因为我的客户将其视为缺陷,并且不关心它是否是控件的行为,他希望对其进行更改。但是,我找不到任何可以说明如何更改它的内容。我所说的行为是,当没有选择任何内容时,ComboBox 弹出窗口打开,在列表中间显示 ItemsSource。我有一个排序的国家列表,除了美国、英国、加拿大位于顶部。这 3 个项目是最常选择的项目,客户希望它们位于顶部,而不必滚动列表来找到它们。这很容易,但是由于列表在中间打开,您仍然需要滚动很多才能找到它们。是否有一些我缺少的属性可以关闭这种行为?我终于能够说服他们 CarouselPanel 不是缺陷,但这个不会飞。

提前致谢!

更新: 所以这个组合框是通过 ViewModel 进行数据绑定的。在这种情况下,ViewModel 没有该特定属性的值(它是一个空字符串),因此 Combobox 显示为空,这很好且可取。当您单击组合框以选择一个值时,它会在可用值的中间显示列表。这是不受欢迎的行为。它应该在顶部的列表中显示第一个值!

【问题讨论】:

    标签: c# xaml combobox windows-runtime behavior


    【解决方案1】:

    好吧,人们会认为开箱即用的 Combobox(没有其他内置的下拉控件)能够像迄今为止任何其他 MS 技术中的任何其他组合框控件一样工作,但当然这是 MS,那么为什么事情应该是一致的。无论如何,如果VM中的值为空,我最终不得不创建一个“空白”条目并预先选择该项目,然后在该属性的设置器中编写代码以忽略“空白”项目如果它是选择。它很笨拙,而且有一股代码味道,但它确实有效

    【讨论】:

      【解决方案2】:

      当您将 SelectedItem 属性设置为一个对象时,ComboBox 会尝试使该对象成为列表中当前选定的对象。如果在列表中找到该对象,它将显示在 ComboBox 的编辑部分,并且 SelectedIndex 属性设置为相应的索引。如果列表中不存在该对象,则 SelectedIndex 属性将保留其当前值。

      【讨论】:

      • 所以这个组合框是通过 ViewModel 进行数据绑定的。在这种情况下,ViewModel 没有该特定属性的值(它是一个空字符串),因此 Combobox 显示为空,这很好且可取。当您单击组合框以选择一个值时,它会在可用值的中间显示列表。这是不受欢迎的行为。它应该在顶部的列表中显示第一个值!
      • 能否在 Combobox 的点击事件中应用 SelectedItem 属性?
      • 选择什么?如果尚未选择一个选项,我不想预先选择一个选项,因为这会更改数据。
      • 也许您需要重新考虑您正在使用的控件类型
      • 嗯,人们会认为开箱即用的 Combobox(没有其他内置的下拉控件)将能够像迄今为止任何其他 MS 技术中的任何其他组合框控件一样工作,但是当然这是MS,所以为什么要保持一致。无论如何,如果VM中的值为空,我最终不得不创建一个“空白”条目并预先选择该项目,然后在该属性的设置器中编写代码以忽略“空白”项目如果它是选择。它很笨拙,而且有一股代码味道,但它确实有效
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多