2016-05-26 6 views
0

私は、自動サイズ調整したいダイアログボックスにコントロール群を持っています。均等に間隔を置いたグリッドの幅を使って物事を再調整しようとするまで、すべてうまくいきました。ここで親のサイズが定義されていないとグリッドの幅「*」が期待どおりに動作しない

はXAMLです:私は期待してい何

enter image description here

ない:

<Grid Margin="20" > 
    <Grid.RowDefinitions> 
     <RowDefinition Height="AUTO" /> 
     <RowDefinition Height="AUTO" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid> 
     ...left controls 
    </Grid> 
    <Border BorderThickness="1" BorderBrush="Gray" Grid.Column="1" Margin="0,10,0,5"> 
     ...right controls 
    </Border> 
    <Grid Grid.Row="2" Grid.ColumnSpan="2> 
     ...okay and cancel 
    </Grid> 
</Grid> 

ここでの結果です。右の列は小さな幅を持ちますが、何らかの理由で「*」を聞いておらず、他の列の半分と同じにしています。

私は最高のグリッド上Width="450"を置く場合、またはUserControl(!または実行時に、それはに座ってウィンドウのサイズを変更)すべてが「ジャンプ」と私は両方の列が均等に配置、期待していものを手に入れる:

enter image description here

しかし、今では、大きなサイズのコンテンツのサイズ変更や自動サイズには反応しません(親コンテナが伸びても伸びないことを除いて)。同じ間隔の後に共有サイズグループ。私が間違ってやっていることはありますか?Width="*"のこの予期した動作ですか?

答えて

0

あなたは正しいです*は、グリッドに比例したサイズをとることを意味します。 Gridは、最大値が広いため、十分なスペースが得られません(Width="450"を設定すると、Gridが広くなります)。あなたはWindow内部ただ1つのグリッドを持っている場合は

、そしてtheSecondColumnは(あなたが望むようには広いとなります)右側にすべて行われます:

あなたの外側のグリッドがでホストされている
<Window x:Class="DataGridAddedColumns.MainWindow" 
    <!-- The code is omitted for the brevity --> 
     Title="MainWindow" Height="550" Width="525" 
      WindowStartupLocation="CenterScreen"> 
    <Grid Name="grid"> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Name="theSecondColumn" Width="*"/> 
     </Grid.ColumnDefinitions> 
    <Grid> 
</Window> 
+0

@Joeは何か質問をしてください。私の返事があなたに役立つと感じたら、私の返事を答えとしてマークして、将来の他の人の検索を簡単にすることができます。してください、これを読んでhttp://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – StepUp

+0

問題は、私は、初期ウィンドウでSizeToContentを使用して使用しています(それはジェネリックダイアログウィンドウですビューが動的に追加されているので、すべてのダイアログに設定することはできないので、ユーザーがサイズを変更するまで「*」サイズを尊重しないでください。 – Joe

1

コンテナの幅が定義されていない場合、実際の幅は子孫の結果になります。つまり、(外側の)グリッドメジャーパスは、右の列(境界線)に「尋ねる」と表示されます。「必要なスペースはどれくらい与えますか?どれくらい必要ですか?」 Borderフラグメントが特定のサイズを必要としない限り、結果はデフォルト(ほとんどの場合はゼロ)です。したがって、崩壊した行動。

基本的には、外側のグリッド幅または2番目の列幅を定義する必要があります(つまり、列内の何かが必要なスペースを指示する必要があります)。

関連する問題