首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不是在DataGridComboBoxColumn中,WPF DataGridComboBoxColumn不显示文本。

如果不是在DataGridComboBoxColumn中,WPF DataGridComboBoxColumn不显示文本。
EN

Stack Overflow用户
提问于 2013-08-21 07:56:28
回答 1查看 1.8K关注 0票数 0

在我的C# WPF应用程序中,我以编程方式向DataGrid添加了一个ComboBoxColumn:

代码语言:javascript
复制
public static DataGridComboBoxColumn getCboCol(string colName, Binding textBinding)
{
    List<string> statusItemsList = new StatusStrList();

    DataGridComboBoxColumn cboColumn = new DataGridComboBoxColumn();
    cboColumn.Header = colName;
    cboColumn.SelectedItemBinding = textBinding;
    cboColumn.ItemsSource = statusItemsList;

    return cboColumn;
}

如果包含的DataGrid中的项包含文本,而我的StatusStrList不包含文本,则不会显示它。

示例:如果我的StatusStrList包含A, B, C,而DataGrid的项包含X,则X将不会显示为ComboBox中的文本。

,我怎样才能解决这个问题?

提前谢谢你,克里斯蒂安

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-21 14:54:11

DataGridComboBoxColumn没有足够的动态来做这样的事情,但是您可以使用DataGridTemplateColumn。下面的代码应该可以实现所需的功能。它通过使用包含一个CellTemplateTextBlock来工作,该TextBlock很容易地显示不在ComboBoxItemsSource中的项。进入编辑模式将显示包含列表中所有项的ComboBox

代码语言:javascript
复制
        DataGridTemplateColumn cboColumn = new DataGridTemplateColumn();
        cboColumn.Header = colName;

        //DataTemplate for CellTemplate
        DataTemplate cellTemplate = new DataTemplate();
        FrameworkElementFactory txtBlkFactory = new FrameworkElementFactory(typeof(TextBlock));
        txtBlkFactory.SetValue(TextBlock.TextProperty, textBinding);
        cellTemplate.VisualTree = txtBlkFactory;
        cboColumn.CellTemplate = cellTemplate;

        //DataTemplate for CellEditingTemplate
        DataTemplate editTemplate = new DataTemplate();
        FrameworkElementFactory cboFactory = new FrameworkElementFactory(typeof(ComboBox));
        cboFactory.SetValue(ComboBox.TextProperty, textBinding);
        cboFactory.SetValue(ComboBox.ItemsSourceProperty, statusItemsList);
        cboFactory.SetValue(ComboBox.IsEditableProperty, true);

        MouseEventHandler handler = new MouseEventHandler(delegate(object sender, MouseEventArgs args)
        {
            ComboBox cboBox = (ComboBox)sender;
            cboBox.IsDropDownOpen = true;
        });

        cboFactory.AddHandler(ComboBox.MouseEnterEvent, handler);

        editTemplate.VisualTree = cboFactory;
        cboColumn.CellEditingTemplate = editTemplate;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18351849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档