2010-01-25 3 views
0

У меня есть следующий код XAML:Как получить ActualWidth из GridViewColumn

 

<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

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