2013-05-15 25 views
2

我對WPF比較陌生,有人可以指點我最好的方法嗎?添加可變數量的控件

我將創建一個連接塊的線框圖。這些盒子將全部排成一列,所以我想到了一個水平排列的矩形和線條堆疊面板。

矩形將填充一個標籤頁,並可點擊。

的問題是我不知道,直到運行時有多少矩形會有。

什麼是正確的方法來做到這一點,它應該在代碼隱藏的地方,我找出矩形的數量,並添加和定位它們以及代碼中的行,或者我可以在XAML中做一些更多的事情靈活性?

矩形的數目將是2至10之間,因此,如果它是2我不想它們填滿的標籤的整個寬度。所以理想情況下,我希望矩形有一個最小和最大寬度,並居中,所以它仍然看起來相當不錯。

很多感謝

回答

2

做類似的東西,它使用<ItemsControl>並結合其ItemsSource到模型的一部分,代表圖塊的集合的正確方法。數據綁定是WPF非常強大的一部分。不幸的是,在答案中快速描述它也太複雜,所以我建議閱讀一些文章/代碼示例以加快速度。

如果您爲塊使用ObservableCollection<DiagramBlock>(或任何其他實現了INotifyCollectionChanged的集合),則在代碼中添加或移除塊會導致UI相應地發生更改。

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; }