Как я могу получить ActualWidth GridViewColumn - PullRequest
0 голосов
/ 26 января 2010

У меня есть следующий XAML:


<GridView x:Key="myGridView">
    <GridViewColumn CellTemplate="{StaticResource myTemplate}" />
</GridView>

<DataTemplate x:Key="myTemplate">
    <ContentPresenter Content="{Binding}" />
</DateTemplate>

Когда я использую его, я хочу, чтобы contentpresenter имел ту же ширину, что и GridViewColumn. До сих пор я пытался использовать привязку RelativeSource, но, похоже, я вообще не могу получить GridViewColumn.

Как мне получить ActualWidth от родителя GridViewColumn от ContentPresenter в моем DataTemplate?

1 Ответ

1 голос
/ 26 января 2010

Проблема с 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>
...