我试图动态地将项目(文本框和按钮)添加到列表框中。
这是我的xaml
:
<ListBox x:Name="projects_list" Height="459" Canvas.Left="20" Canvas.Top="86" Width="755">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Height="42">
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
而且,在StackPanel
我想拥有我的2个按钮。
在foreach
内,我创建了这样的按钮:
items.ForEach(delegate (Projects project)
{
Button txt = new Button(); // NAME
txt.Height = 32;
txt.Width = 320;
txt.Content = project.name;
Button gen_token = new Button();
gen_token.Height = 26;
gen_token.Width = 180;
gen_token.Content = "Generate";
this.projects_list.Items.Add(txt);
this.projects_list.Items.Add(gen_token);
}
但是,当我将元素添加到ListBox
时,没有任何内容出现。
尽管如此,我的列表中有很多StackPanel
个。
有什么想法吗? 谢谢!
编辑: 如果我有
<Button Content="{Binding}" ></Button>
进入stackPanel
,我的按钮显示,但不是我想要的,它们是stackpanel
的一个,我想在每个面板上都有两个按钮..
编辑2: 所以,我试过这个:
public List<Dictionary<string, Button>> Items { get; set; }
....
Items = new List<Dictionary<string, Button>>();
DataContext = this;
稍后在each
Dictionary<string, Button> dict = new Dictionary<string, Button>() { { "name", txt }, { "token", gen_token } };
Items.Add(dict);
所以在我的xaml中,我有:
<ListBox x:Name="projects_list" Height="459" Canvas.Left="20" Canvas.Top="86" Width="755" ItemsSource="{Binding Items}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Height="42">
<Button Content="{Binding Path=name}" ></Button>
<Button Content="{Binding Path=token}" ></Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但是,仍然没有出现:(
答案 0 :(得分:0)
一个简单的例子:
Window.Xaml
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
背后的代码
public partial class MainWindow : Window
{
public ObservableCollection<string> Items { get; set; }
public MainWindow()
{
InitializeComponent();
Items = new ObservableCollection<string> { "Item 1", "Item2" };
DataContext = this;
}
}
这只是一个给你一个想法的简单例子。您可能会使用ViewModel而不是代码。