2012-02-24 82 views
0

我正在尋找一個像水平堆棧面板一樣工作的WPF佈局,這樣當項目有足夠的空間容納它們時,項目會選擇自己的理想寬度,但還會均勻地壓扁項目當他們不適合可用面板空間時。面板佈局均勻地擠壓項目以適合

我能接近我想要這個:

<Grid Width="400" Height="80"> 
     <UniformGrid Rows="1" HorizontalAlignment="Left"> 
      <Button Content="Long Button" /> 
      <Button Content="Very Long Button" /> 
      <Button Content="Button" /> 
      <Button Content="Button" /> 
      <Button Content="Button" /> 
     </UniformGrid> 
    </Grid> 

這裏的問題是在UniformGrid所有按鈕保持相同的寬度。

如果我有一個StackPanel更換UniformGrid,那麼項目大小正常,但是當他們超出最大尺寸StackPanel可以增長,而不是被強迫(由於其固定大小母公司),它們將被剪切出來,進入更小的區域。

那麼,有沒有一種方法可以獲得我想用現成的面板的行爲?

+0

如果你想動態,不,我不知道這樣做的一種方式。我們編寫了一個自定義面板來爲項目控件中的動態內容執行此類操作。如果你不需要這個,Rui Gaspars答案可能是最好的,但是我將列定義的寬度始終設置爲*(星號) – dowhilefor 2012-02-24 10:46:54

+0

我嘗試創建自定義面板。這似乎比我想象的要容易。 – Mark 2012-02-24 11:09:15

回答

1

那麼,有沒有一種方法,我能得到我想要與外的箱板的行爲?

不,如果你看看all the existing panels你會看到沒有一個符合要求,實現你自己的。

+0

這正是我所做的。實際上,只花了幾分鐘時間來重現我想要的確切行爲。儘管這不是我想要的答案,但你贏了。 – Mark 2012-02-24 12:13:43

0

如果按鈕的大小是靜態的,你可以使用這個:

<Grid Width="400" Height="80"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*"/> 
     <ColumnDefinition Width="3*"/> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Button Grid.Column="0" Content="Long Button" /> 
    <Button Grid.Column="1" Content="Very Long Button" /> 
    <Button Grid.Column="2" Content="Button" /> 
    <Button Grid.Column="3" Content="Button" /> 
    <Button Grid.Column="4" Content="Button" /> 
</Grid> 
+0

不幸的是,面板的內容不會是靜態的,所以我們無法事先知道理想的列寬。 – Mark 2012-02-24 11:08:01