0

次の XAML があります。

<GridView x:Key="myGridView">
    <GridViewColumn CellTemplate="{StaticResource myTemplate}"/>
</GridView>
<DataTemplate x:Key="myTemplate">
    <ContentPresenter Content="{Binding}"/>
</DateTemplate>

使用するときは、コンテンツ プレゼンターの幅を GridViewColumn と同じにしたいと考えています。これまでのところ、RelativeSource バインディングを使用してみましたが、GridViewColumn をまったく取得できないようです。

ActualWidthGridViewColumnからContentPresenterを myから取得するにはどうすればよいDataTemplateですか?

4

1 に答える 1

1

問題GridViewは、生成されたコントロール階層に視覚要素としてのセルの概念がないことです。ContentPresenter列の幅を広くするには、のプロパティを に設定する必要がHorizontalContentAlignmentありListViewItemますStretch。このようにしてContentPresenter、列の幅である使用可能な幅まで伸びます。

これを示すサンプル XAML を次に示します。

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Grid>
      <Grid.Resources>
         <DataTemplate x:Key="leftTemplate">
            <ContentPresenter HorizontalAlignment="Left" Content="{Binding}"/>
         </DataTemplate>
         <DataTemplate x:Key="rightTemplate">
            <ContentPresenter HorizontalAlignment="Right" Content="{Binding}"/>
         </DataTemplate>
         <GridView x:Key="myGridView">
            <GridViewColumn Width="150" CellTemplate="{StaticResource rightTemplate}" Header="Right"/>
            <GridViewColumn Width="150" CellTemplate="{StaticResource leftTemplate}" Header="Left"/>
         </GridView>
         <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
         </Style>
      </Grid.Resources>
      <ListView Margin="10" View="{StaticResource myGridView}">
         <ListViewItem Content="item 1"/>
         <ListViewItem Content="item 2"/>
         <ListViewItem Content="item 3"/>
         <ListViewItem Content="item 4"/>
         <ListViewItem Content="item 5"/>
      </ListView>
   </Grid>
</Page>
于 2010-01-25T23:34:43.197 に答える