2012-08-24 33 views
0

我想創建一個複選框的多列列表,但這裏有一個問題 - 當我調整窗口大小時,我希望所有事情都可以相應地縮放,包括文本大小。我一直在嘗試使用WrapPanel和ViewBox,但無法獲得XAML的權利。這些控件是最好的選擇,還是應該使用ListBox(注意我不需要選擇功能或滾動條)?任何建議或例子,我如何能夠實現這一點將不勝感激。我使用的是MVVM,如果這有所作爲,那麼列表將被數據綁定。尋找一個具有縮放比例的WPF多列表

順便說一句,因爲開始WPF我一直在努力瞭解哪些控制大小給他們的孩子和他們的父母大小。有沒有好的網站,備忘單,或者是什麼總結每個控制的行爲?

回答

1

如果您有可變數量的子元素,則可以將UniformGrid放入ViewBox。

如果子元素必須由一個DataTemplate可視化,你必須使用一個ItemsControl與ItemsPanel屬性設置爲這樣的UniformGrid:

<Viewbox Stretch="Uniform"> 
    <ItemsControl ItemsSource="{Binding Items}" Width="400" Height="200"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Columns="4"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Border Background="AliceBlue"> 
        <CheckBox Content="{Binding Label}" IsChecked="{Binding IsChecked}" 
           HorizontalAlignment="Center" VerticalAlignment="Center"/> 
       </Border> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Viewbox> 
+0

我不認爲這是可以使用網格因爲文本塊的數量不固定。他們也會被數據綁定,所以我將不得不使用DataTemplate創建控件。 –

+0

太棒了,非常感謝。一個當之無愧的綠色壁蝨!它是如何工作的?我不明白WPF如何知道將每個複選框放置在單獨的網格單元格中。 –

+0

這就是UniformGrid所做的。如果當前列等於「Columns」屬性(也適用於「行」),則單獨的單元格中的每個子項都會環繞。 – Clemens