2011-01-11 62 views
34

我有一個用戶控制,稱之爲用戶控件中,具有下列列定義網格:Grid的SharedSizeGroup和*漿紗

<Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="B"/> 
      <ColumnDefinition Width="*" SharedSizeGroup="C"/> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="D"/> 
      <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="E"/> 
      <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="F"/> 
      <ColumnDefinition Width="110" SharedSizeGroup="G"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/> 
</Grid.ColumnDefinitions> 

我也有主窗口,其中包含一個網格本身,具有以下屬性在網格上定義:

Grid.IsSharedSizeScope="True" 

現在,我增加了幾個用戶控件的在主窗口的網格(每一個單獨的行)。我的目標是讓不同用戶控件的每個列寬保持同步。使用SharedSizeGroup時除了一件事情以外,一切正常。看來任何寬度爲*的列都不會像應該那樣運行。它看起來像*列的寬度設置爲自動而不是。

SharedSizeGroup和* size是否有任何限制/問題?這似乎是保持列寬同步的最佳方式,但我似乎無法解決此問題。

謝謝。

回答

46

MSDN

列和行參與大小共享 不尊重星 大小。在大小共享的情況下, 星上漿被視爲自動

如果使用星然後所有列將是相同的寬度,所以你應該分配相同的SharedSizeGroup所有,如果你不介意的自動大小方面:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="B"/> 
    <ColumnDefinition Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="D"/> 
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition Width="110" SharedSizeGroup="G"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/> 
</Grid.ColumnDefinitions> 

(從這種行爲也遵循當SharedSizeGroup設爲您可以刪除Width屬性)


您可以推斷出,如果所有自動調整大小的列都處於共享大小組中,那麼所有星形大小的列將具有相同的大小,因爲範圍中的每個網格將具有相同數量的剩餘未使用空間,並將分配給星形大小列。

一個簡單的例子:

<Grid.ColumnDefinitions> 
    <ColumnDefinition SharedSizeGroup="A"/> 
    <ColumnDefinition SharedSizeGroup="B" Width="*"/> 
    <ColumnDefinition SharedSizeGroup="C"/> 
</Grid.ColumnDefinitions> 

作爲解釋Width="*"什麼都不會做,但作爲列02是同步的,列1必須要同步的作爲,所以你能不能別再SharedSizeGroup

<Grid.ColumnDefinitions> 
    <ColumnDefinition SharedSizeGroup="A"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition SharedSizeGroup="C"/> 
</Grid.ColumnDefinitions> 
+0

感謝您的鏈接。不幸的是,將*列設置爲使用不同的SharedSizeGroup將導致所有這些列的寬度同步(這是預期的),但不是我正在尋找的。我需要每個列寬度單獨同步。 – Flack 2011-01-12 03:10:23