WPF中的动态控制

时间:2012-07-09 10:20:00

标签: c# wpf

我正在尝试在WPF表单中创建动态控件(Label和combobox),并相应地进行排列。这样做的最佳做法是什么,以及如何在窗口调整时调整窗口大小以适应控件?

public MainWindow()
    {
        MyEntities db = new MyEntities();
        InitializeComponent();
        var ID = db.Courses.Where(f => f.CourseId!=null).ToList();
        foreach (var c in ID) 
        {
            ComboBox c = new ComboBox();                
            this.stackpanel.Children.Add(c);
        }
    }            

XAML

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">

    <StackPanel Name= "stackpanel"/>     
</Window>

1 个答案:

答案 0 :(得分:3)

您可以声明ItemsControl并提供项目模板:

 <ItemsControl ItemsSource="{Binding Collection}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" />
                 <ComboBox ... />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

正如Batuu建议您可以使用ListView之类的其他控件来获得额外的行为。

对于使用控件列表增长的窗口,您可以使用LPL在评论中建议的Window.SizeToContent属性。

<Window x:Class="WpfApplication2.MainWindow"
    ...
    SizeToContent="Height">

可用选项描述为here