2011-06-06 88 views
25

想象我有一個窗口上的兩個WPF按鈕,與內容如下:大小均勻的按鍵根據大按鈕的內容

<Button>OK</Button> 
<Button>Cancel</Button> 

我想這些按鈕是相同的寬度,但是在這樣一個場景, Content綁定到給定用戶的語言的本地化值,我不知道按鈕需要多大以適應新的內容。

我應該如何將最小寬度應用到這些按鈕上,以使最寬寬度(根據內容)的寬度有效地用作兩者的MinWidth,從而使它們保持均勻?或者換句話說:我不希望按鈕是它們容器的寬度(除非以聰明的方式使用容器是我的問題的答案),我不希望它們每個只根據他們自己的內容進行尺寸調整,因爲這會使他們的尺寸不同。我想要中間的東西。要顯示內容的尺寸最大的尺寸,以及所有其他尺寸都要調整到相同寬度的尺寸,寬度都是相同的。

我希望答案在於把它們放在某種容器中。我知道我可以使用Grid並讓他們填充網格「單元格」,但重點是我不希望他們也是也是寬的,要麼。我知道我可以在按鈕的Content_Changed事件上運行一些代碼隱藏功能,並將最小寬度設置爲最寬按鈕的最小寬度,但我對pure-xaml方法感興趣。這可能是我需要創建一個自定義控件,擴展ItemsControl,當新項目被添加或重新調整大小,並且將最寬項目的寬度應用爲所有其他項目的MinWidth時,代碼隱藏。

非常感謝提前。

+0

所以你說你不想使用並設置Buttons Width =「Auto」? – Willem 2011-06-06 09:45:52

+0

我不希望按鈕是他們的容器的寬度(除非以聰明的方式使用容器是我的問題的答案),並且我不希望他們調整他們的內容的大小,因爲這會使他們不同大小。我想要中間的東西。具有最大尺寸的內容以顯示其內容,並且所有其他尺寸的尺寸都相同,因此寬度均相等。 – 2011-06-06 09:59:28

+0

那麼我猜你的按鈕都是分散在你的視圖上,因爲如果沒有,並且它們都被分組了,那麼ColumnDefinition就可以實現。如果他們都分散,我也想知道你的問題的一個很好的解決方案。 =) – Willem 2011-06-06 10:10:39

回答

7
Use UniformGrid 

<UniformGrid HorizontalAlignment="Right" Rows="1" Columns="2"> 
    <Button Content="Ok" Grid.Column="0"/> 
    <Button Content="Cancel" Grid.Column="1"/> 
</UniformGrid> 
+1

這個答案的優點是允許你爲不需要的按鈕設置Visibility =「Collapsed」,並且整個單元消失 - 用SharedSizeGroup網格這樣做會留下一個洞,這可能不是你想要的。 加上其terser! – Wolfshead 2016-06-24 07:25:20

18

網格

<Grid HorizontalAlignment="Right" Grid.IsSharedSizeScope="true"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition SharedSizeGroup="A"/> 
     <ColumnDefinition SharedSizeGroup="A"/> 
    </Grid.ColumnDefinitions> 
    <Grid.Children> 
     <Button Grid.Column="0" Content="OK"/> 
     <Button Grid.Column="1" Content="Cancel"/> 
    </Grid.Children> 
    </Grid> 

這可以被分解,你只需要設置IsSharedSizeScope在一個共同的祖先,如:

<StackPanel Grid.IsSharedSizeScope="true"> 
     <Grid HorizontalAlignment="Right"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="A"/> 
      </Grid.ColumnDefinitions> 
      <Grid.Children> 
       <Button Grid.Column="0" Content="OK"/> 
      </Grid.Children> 
     </Grid> 
     <!-- ... --> 
     <Grid HorizontalAlignment="Left"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="A"/> 
      </Grid.ColumnDefinitions> 
      <Grid.Children> 
       <Button Grid.Column="0" Content="Cancel"/> 
      </Grid.Children> 
     </Grid> 
    </StackPanel> 

爲了防止按鈕從becomming太大將網格的HorizontalAlignment更改爲Stretch以外的值或設置MaxWidth