2011-11-22 72 views
1

例子:獲取GridViewColumn從控制裏面的DataTemplate

<ListView Name="lvAnyList" ItemsSource="{Binding}"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Header="xx" DisplayMemberBinding="{Binding XX}" CellTemplate="{DynamicResource MyDataTemplate}"/> 
     <GridViewColumn Header="yy"> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
      <TextBlock Text="{Binding YY}" /> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
    </ListView.View> 
</ListView> 

如果我訪問TextBlockDataTemplate我將有機會獲得有關約束的路徑信息。 但我不知道如何查找(從TextBlock開始)其包含GridViewColumn(位於GridViewRowPresenter列列表中),並將其與GridViewColumn(從GridViewHeaderRowPresenter列列表中)的網格進行比較以獲取標頭的名稱。

最後我應該有對:XX-> XX,YY-> YY

我能找到裏面ListView所有TextBlocks列表使用此:

GridViewRowPresenter gvrp = ControlAux.GetVisualDescendants<GridViewRowPresenter>(element).FirstOrDefault(); 
IEnumerable<TextBlock> entb = GetVisualDescendants<TextBlock>(gvrp); 

我能找到所有GridViewColumnHeaders的列表:

GridViewHeaderRowPresenter gvhrp = ControlAux.GetVisualDescendants<GridViewHeaderRowPresenter>(element).FirstOrDefault(); 

而且我找不到TextBlocksGridViewColumns之間的連接...

我希望這是可以理解的。

回答

0

GridViewColumns是他們從來沒有在UI的任何地方出現的抽象對象,你可以嘗試命名列,並將其綁定在你需要它使用ElementName控制的標籤,或者如果一個失敗的Sourcex:Reference上的名稱。

+0

因此,DataTemplate中的TextBlock與標題名稱之間沒有其他連接? – ragi

+0

我至少不知道任何。 –