2

この質問GridvsStackpanelで定義された適切性の定義によるグリッドを使用しています。ただし、グリッドを操作する場合は、グリッド内のグリッド内のコントロールの位置を明示的に定義する必要があります。これは、コントロールを並べ替える必要がある場合、またはグリッドに新しいコントロールを追加する場合に問題になります。例として提供されているコードを使用して、テキストとテキストボックスの行と列を並べて、後で簡単に変更または展開できるようにする方法はありますか?

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="3*"/>
        <ColumnDefinition Width="7*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <TextBlock Text="Value One:"   Grid.Row="0" Grid.Column="0"/>
        <TextBox x:Name="TextBoxOne"   Grid.Row="0" Grid.Column="1"/>

    <TextBlock Text="Value Two:"   Grid.Row="1" Grid.Column="0"/>
        <TextBox x:Name="TextBoxTwo"   Grid.Row="1" Grid.Column="1"/>

    <TextBlock Text="Value Three:" Grid.Row="2" Grid.Column="0"/>
        <TextBox x:Name="TextBoxThree" Grid.Row="2" Grid.Column="1"/>
</Grid>
4

1 に答える 1

5

これを非常に簡単に実行できるカスタムコントロールを作成しましたが、作成する前は、通常、次のようなものを使用していました。

<ControlTemplate x:Key="ColumnsTemplate" TargetType="HeaderedContentControl">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="3*" />
      <ColumnDefinition Width="7*" />
    </Grid.ColumnDefinitions>
    <ContentPresenter Grid.Column="0" ContentSource="Header" />
    <ContentPresenter Grid.Column="1" />
  </Grid>
</ControlTemplate>

<ItemsControl ... ItemTemplate="{StaticResource ColumnsTemplate}">
  <HeaderedContentControl Header="Value One:">
    <TextBox x:Name="TextBoxOne" />
  </HeaderedContentControl>
  <HeaderedContentControl Header="Value Two:">
    <TextBox x:Name="TextBoxTwo" />
  </HeaderedContentControl>
  ...
</ItemsControl>

これにより、ItemsControlからのアイテムの簡単な追加/削除、さらにはデータバインディングが可能になります。

スターサイズ(3*および7*)ではなくグリッドでの自動サイズ設定を使用する場合はIsSharedSizeScopeItemsControlSharedSizeGroupを最初に設定することで共有サイズ変更スコープを使用できますColumnDefinition

別のオプションはですがGridView、この目的で使用するのはもっと難しいと思います。

于 2010-03-01T17:41:55.720 に答える