2010-01-25 45 views
0

的ActualWidth的,我有以下XAML:如何獲得GridViewColumn

 

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

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

當我使用它,我想contentpresenter有相同的寬度GridViewColumn。到目前爲止,我已經嘗試使用RelativeSource綁定,但我似乎無法獲得GridViewColumn。

如何從ContentPresenter我的DataTemplate中從父GridViewColumn獲得ActualWidth

回答

1

GridView的問題在於,在生成的控制層次結構中沒有單元格作爲可視元素的概念。爲了使ContentPresenter的欄寬,您應該將HorizontalContentAlignmentListViewItem的屬性設置爲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> 
+0

優秀的,它的工作原理。 – apandit 2010-01-26 14:39:55