【问题标题】:Changing combobox item background color within wpf application在 wpf 应用程序中更改组合框项目背景颜色
【发布时间】:2016-01-26 15:13:11
【问题描述】:

我有一个 wpf 应用程序,我需要在其中自定义一个组合框以使其可编辑。

public class AutoCompleteFacturation: ComboBox 
{
    List<vue_fsign_fiche_signaletique> liste = new List<vue_fsign_fiche_signaletique>();
    // [...]
    ItemsSource = NewDataSource;
    liste = NewDataSource.ToList<vue_fsign_fiche_signaletique>();
    ComboBoxItem item = (ComboBoxItem)base.Items[0];
    item.Background = System.Windows.Media.Brushes.AliceBlue;
}

我需要更改第一项的背景ComboBoxItem item = (ComboBoxItem)base.Items[0]; ==> 我得到一个异常,表明无法将vue_fsign_fiche_signaletique 转换为ComboBoxItem

那么我该如何解决这个问题以着色组合框的第一项?

谢谢

【问题讨论】:

    标签: c# .net wpf forms mvvm


    【解决方案1】:

    您获得的项目是使用DataSource 绑定的项目(此处为vue_fsign_fiche_signaletique 类型)。

    你需要的是ComboBoxItem,它是一个容器。要获取它,请使用ItemContainerGenerator.ContainerFromIndex(index)ItemContainerGenerator.ContainerFromItem(item)

    https://msdn.microsoft.com/library/ms750552(v=vs.90).aspx

    【讨论】:

    • +1 因为使用 ItemContainerGenerator 是获取与绑定数据对象关联的 UI 对象的正确方法 :) 也就是说,我认为在这种特定情况下触发器或转换器会更容易
    • @Arie 我得到空值ComboBoxItem cbi = (ComboBoxItem)ItemContainerGenerator.ContainerFromIndex(0); ComboBoxItem item = (ComboBoxItem)ItemContainerGenerator.ContainerFromItem(SelectedFiche);
    • @LamloumiAfif 您需要在生成容器后运行它。有一个快速示例 here 如果您愿意...基本上您将一个事件附加到 ItemContainerGenerator.StatusChanged,当状态更改为 ContainersGenerated 时,您删除事件处理程序并将任何自定义应用到 UI 对象。不过,在您的具体情况下,您可能需要使用带有转换器的后台绑定进行调查
    【解决方案2】:

    您已将ComboBox 绑定到您的列表中。

    所以Items 返回vue_fsign_fiche_signaletique 的列表

    2 种可能性:

    foreach (vue_fsign_fiche_signaletique fiche in liste) { ComboBoxItem i = new ComboBoxItem(); i.Content = fiche.Text; i.Background = System.Windows.Media.Brushes.AliceBlue; base.Items.Add(i); }

    或者将您的vue_fsign_fiche_signaletique 包装在 View Model 中并使用 IValueConverter

    【讨论】:

    • 我个人更喜欢ItemsSource 绑定,而不是循环遍历对象并为每个对象手动创建ComboBoxItem。不过,我建议您实现触发器或后台绑定 + 转换器。
    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 2022-01-21
    • 2016-07-09
    • 2011-07-26
    • 2018-12-27
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多