添加可变数量的控件

时间:2013-05-15 00:04:07

标签: c# wpf xaml

我对WPF比较陌生,有人能指出我最好的方法吗?

我将使用连接块的线条创建一个框图。这些盒子都会排成一排,所以我想到了一个带有矩形和直线的水平对齐的堆叠面板。

矩形用于填充标签页,并且可以点击。

问题是我不知道在运行时会有多少个矩形。

这样做的正确方法是什么,如果是在代码隐藏中我找到矩形的数量并添加和定位它们以及代码中的行或者我可以在XAML中做一些更灵活的事情?

矩形的数量在2到10之间,所以如果是2,我不希望它们填满标签的整个宽度。理想情况下,我希望矩形具有最小和最大宽度并居中,因此它看起来仍然很好。

非常感谢提前

2 个答案:

答案 0 :(得分:2)

使用<ItemsControl>做某事的正确方法,并将其ItemsSource绑定到代表图块集合的模型的一部分。数据绑定是WPF非常强大的一部分。不幸的是,在答案中快速描述它也太复杂了,所以我建议阅读一些文章/代码示例,以便快速掌握它。

如果您对块使用ObservableCollection<DiagramBlock>(或任何其他实现INotifyCollectionChanged的集合),则在代码中添加或删除块将导致UI相应更改。

答案 1 :(得分:0)

以下是使用databinding在运行时添加多个控件(button)的示例(代码隐藏)。应该是一个很好的起点。

并且,如果在加载表单后数据会发生变化,您可以实现INotifyPropertyChange并相应地更新

MainWindow.xaml:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" >
        <ItemsControl ItemsSource="{Binding YourCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
</Window>

MainWindow.xaml.cs

    public MainWindow()
    {
        InitializeComponent();

        YourCollection = new List<Button>();


        //Dummy Data for Demo 
        YourCollection.Add(new Button() { Height = 25, Width = 25 });
        YourCollection.Add(new Button() { Height = 25, Width = 25 });

        this.DataContext = this;

    }

    public List<Button> YourCollection { get; set; }