2014-03-19 66 views
0

我有這樣的XAML示例:怎麼看ItemControl.ItemsPanel.Template從代碼隱藏

<ItemsControl MinHeight="150" ItemsSource="{Binding fieldList}" Name="myItemsControl"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <Canvas Name="canvasFields" MinHeight="150" Background="White" Margin="10" Height="{Binding HauteurCanvas}"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemContainerStyle> 
        <Style TargetType="ContentPresenter"> 
         <Setter Property="Canvas.Left" 
          Value="{Binding Column}" /> 
         <Setter Property="Canvas.Top" 
          Value="{Binding Row}" /> 
         <Setter Property="Width" 
          Value="{Binding Width}" /> 
         <Setter Property="Height" 
          Value="{Binding Height}" /> 
        </Style> 
       </ItemsControl.ItemContainerStyle> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
          <c:ControlCustomField MouseLeftButtonDown="ControlCustomField_MouseLeftButtonDown" MouseMove="ControlCustomField_MouseMove" MouseLeftButtonUp="ControlCustomField_MouseLeftButtonUp"/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 

而且我想進入電影從代碼canvasFields落後,但我只能看到myItemsControl。

到目前爲止,我試過很多東西。在後面的代碼,這些都不作品:

canvasFields這僅僅是沒見過。

((Canvas)(myItemsControl.ItemsPanel.Template))這給出了一個「無法轉換」的錯誤。

myItemsControl.canvasFields這也沒有看到。


那麼,你看到了這筆交易..我怎麼能從代碼後面「看到」canvasFields?

我可能錯過了一些非常明顯的訪問它...
在此先感謝!

+0

你想要什麼?無論你想要做什麼,你可能都需要通過適當的DataBinding來完成,而不是程序代碼。 –

+0

你可能是對的。我會沿着這條道路前進,並在此進一步介紹我的進展。 –

回答

1

您無法訪問它!因爲它是一個模板。而不是創建的控件。

+1

你說得對。我需要找到別的東西。 –

0

你應該看看FrameworkElement.GetTemplateChild方法,它是爲此目的而設計的。但是,這需要您繼承ItemsControl的子類,因爲此方法受到保護。

如果您需要避免這種情況,則可以使用VisualTreeHelper.GetChild方法分析元素的類型和Name屬性遍歷ItemsControl的可視化樹,直到找到合適的元素爲止。

0

你需要遍歷ItemsControl的視覺後裔,尋找以下任一條件的Panel會議:

if (panel.IsItemsHost && panel.TemplatedParent == itemsControl) 
    /* You've found the ItemsPanel. */; 

var itemsPresenter = panel.TemplatedParent as ItemsPresenter; 
if (itemsPresenter != null && itemsPresenter.TemplatedParent == itemsControl) 
    /* You've found the ItemsPanel. */; 

它可能不是100%可靠的,但它並沒有讓我失望然而。