web-dev-qa-db-ja.com

グリッドのSharedSizeGroupおよび*サイジング

ユーザーコントロールがあり、UserControlと呼ばれます。これには、次の列定義を持つグリッドがあります。

<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"

ここで、MainWindowのグリッドにUserControlsをいくつか追加しました(それぞれが個別の行に)。私の目標は、異なるUserControlsの各列幅を同期したままにすることです。 SharedSizeGroupを使用すると、1つを除いてすべてが正常に機能します。幅が*の列は正常に動作しないようです。 *列幅は、代わりにAutoであるかのように設定されているようです。

SharedSizeGroupおよび*サイジングに制限/問題はありますか?これは列の幅を同期させる最良の方法のようですが、これを修正することはできません。

ありがとう。

38
Flack

[〜#〜] 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>

(この動作から、Widthが設定されているときにSharedSizeGroupプロパティを削除できることにもなります)


すべての自動サイズ変更列が共有サイズグループにある場合、すべてのスターサイズ変更列のサイズは、スコープ内のすべてのグリッドのスターサイズ列に分配される残りの未使用スペースと同じになると推測できます。 。

簡単な例:

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

説明したように、Width="*"は何もしませんが、列として0および2は同期され、列1も同期する必要があるため、単にSharedSizeGroupをドロップできます。

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