2012-10-29 95 views
2

我有WrapPanel和非常類似的物品。也許WrapPanel是一個錯誤的容器,只是描述了我的內容。Stretch WrapPanel物品

我希望所有物品都有相同的寬度;最小寬度爲120.另外,我希望項目能夠伸展,這就是重點。

如果WrapPanel寬度是150(小於2 *最小)會有一列和物品寬度將是150

如果WrapPanel寬度是350(小於3 *最小)會有兩列和項目的寬度將是175(350/2)。

如果WrapPanel寬度爲370(小於4 *最小值),則會有三列,而項目的寬度將爲123(370/3)。它也可以是123和124中的一個,實際上並不重要。

問題是我該如何得到這種行爲?

+0

你有沒有試過UniformGrid? – Bijan

+0

是否自動設置列號?我沒有找到這個功能。 – adontz

+0

是的,如果您將其行設置爲「1」,那麼您甚至不必爲每個元素設置行或列。 – Bijan

回答

4
public MainWindow() 
    { 
     DataContext = this; 
     SomeList.Add(new SomeType()); 
     SomeList.Add(new SomeType()); 
     SomeList.Add(new SomeType()); 
     SomeList.Add(new SomeType()); 
     SomeList.Add(new SomeType()); 
     InitializeComponent(); 
    } 
    //SomeList Observable Collection 
    private ObservableCollection<SomeType> _someList = new ObservableCollection<SomeType>(); 
    public ObservableCollection<SomeType> SomeList { get { return _someList; } } 

    private void UniformGrid_SizeChanged(object sender, SizeChangedEventArgs e) 
    { 
     var grid = sender as UniformGrid; 
     if (grid.ActualWidth > 370) grid.Columns = 3; 
     else if (grid.ActualWidth > 150) grid.Columns = 2; 
     else grid.Columns = 1; 
    } 
} 
public class SomeType : DependencyObject 
{ 
    //Title Dependency Property 
    public string Title 
    { 
     get { return (string)GetValue(TitleProperty); } 
     set { SetValue(TitleProperty, value); } 
    } 
    public static readonly DependencyProperty TitleProperty = 
     DependencyProperty.Register("Title", typeof(string), typeof(SomeType), new UIPropertyMetadata("unset yet")); 
} 


<Window.Resources> 
    <DataTemplate x:Key="SomeTemplate" DataType="{x:Type local:SomeType}"> 
     <Border BorderBrush="Black" BorderThickness="2" CornerRadius="4"> 
      <TextBlock Text="{Binding Title}"/> 
     </Border> 
    </DataTemplate> 
</Window.Resources> 
<ItemsControl 
    ItemsSource="{Binding SomeList}" 
    ItemTemplate="{StaticResource SomeTemplate}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid SizeChanged="UniformGrid_SizeChanged"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+0

哦,那可行!謝謝。 – adontz