2010-01-25 28 views
0

je le XAML suivant:Comment puis-je obtenir la ActualWidth du GridViewColumn

 

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

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

Quand je l'utilise, je veux le ContentPresenter d'avoir la même largeur que la GridViewColumn. Jusqu'à présent, j'ai essayé d'utiliser la liaison RelativeSource, mais je n'arrive pas à obtenir la GridViewColumn.

Comment puis-je obtenir le ActualWidth du parent GridViewColumn du ContentPresenter dans mon DataTemplate?

Répondre

1

Le problème avec GridView est qu'il n'y a pas de notion de cellules en tant qu'éléments visuels dans la hiérarchie de contrôle générée. Pour que votre ContentPresenter soit large comme la colonne vous devez définir la propriété HorizontalContentAlignment du ListViewItem à Stretch. De cette façon, le ContentPresenter s'étendra jusqu'à la largeur disponible, qui est la largeur de la colonne.

Voici un exemple XAML qui illustre ceci:

<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> 
+0

Excellent, cela fonctionne. – apandit