【问题标题】:Dynamic Combobox at SelectedIndex of ListBoxListBox 的 SelectedIndex 处的动态组合框
【发布时间】:2017-11-23 20:54:33
【问题描述】:

在 WPF 应用程序中,我有一个 ListBox 并与来自 Sql 的数据绑定。并且在列表框中还有一个堆栈面板。

一旦我双击列表框的项目,我需要在其中放置/添加动态组合框。

我可以得到一个列表框的选定索引。

int seleteditem = lstbxusername.SelectedIndex;

我创建了动态组合框

  System.Windows.Controls.ComboBox cmb = new ComboBox();
            cmb.Background = Brushes.Green;

使用 Stackpanel 添加组合框

        newstckpnl.Children.Add(cmb);

我的问题是如何在列表框的选定索引中添加动态组合框。

这可能吗?感谢帮助。

【问题讨论】:

  • 请阅读 MVVM。如果您通过绑定设置ItemsSource,则不应在后面的代码中手动将项目添加到ItemsControl(在您的情况下为ListBox)的Items 集合。您需要将 ItemsSource 绑定到 ObservableCollection<string> 并将字符串添加到视图模型中的此集合中。
  • 另外,你将ItemsSource绑定到什么?
  • 我得到 margin={0,0,0,0} 它有什么问题?如果您更好地描述您的问题,您可以在很久以前得到答案。现在你强迫人们提出很多问题来明确你的问题。

标签: c# wpf listbox margin selectedindex


【解决方案1】:

当然可以。您只需要先从ListBox 中取出ListBoxItem,如下所示。

var listBox = new ListBox();
var listBoxItem = listBox.SelectedItem as ListBoxItem;
var listBoxItemMargin = listBoxItem.Margin;

目前您正在向ListBox 添加字符串。字符串显然没有边距。为了使上面的代码正常工作,您需要将ListBoxItems 添加到您的ListBox,如下所示。

listBox.Items.Add(new ListBoxItem {Content = dr.GetString(1) });

【讨论】:

  • var listBoxItem = listBox.SelectedItem as ListBoxItem; 在这个区域我得到空值。它没有得到 seleteditem
  • SelectedItem 表示项目视图模型,以防ItemsSource 用于填充ListBox。您必须使用 ItemContainerGeneratorListBox 来获取项目的容器,然后获取它的 Margin
  • @User6667769 您能否告诉我们您如何将您的项目添加到Listbox。这样我就能明白为什么这可能会给您带来问题。
  • @User6667769 你是什么意思但是我怎样才能将它设置为特定的变量?您关于如何在ListBox 中获取所选项目的边距的问题。如果你知道如何获取项目容器,你就会知道如何获取它的Margin
  • lstbxusername.ItemContainerGenerator.ContainerFromIndex(selectedindex); 从这里我可以获取所选项目的所有属性。但所选项目的边距显示 {0,0,0,0}。 @马克西姆
【解决方案2】:

我做了一些事情,它对我有用!

我得到一个列表框的选定索引

int seleteditem = lstbxusername.SelectedIndex;

然后创建组合框

System.Windows.Controls.ComboBox cmb = new ComboBox();

通过使用组合框对象,我将它添加到列表框选定索引中

 lstbxusername.Items.Insert(seleteditem, cmb);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多