2016-06-23 15 views
1

私たちは、Windows Phoneアプリケーションを持っています。そこには、DataTemplateがPage.Resource内にあります。私たちは、ビジュアルツリーヘルパーを使用し、その内部に子コントロールを見つけるために、反復してきたこれまでのところチャイルドコントロールのページ内リソースを見つけるには?

<PhoneApplicationPage 
<PhoneApplicationPage.Resources> 
<DataTemplate> 
<ScrollViewer> // We want to fetch this control inside DataTemplate 
.. 
</ScrollViewer> 
</DataTemplate> 
</PhoneApplicationPage.Resources> 

<Grid Name="LayoutRoot"> 
<ItemsControl ItemTemplate={StatisSource DataTemplate}> 
</ItemsControl> 
</Grid> 

</PhoneApplicationPage 

:以下は、XAMLです。以下は、私たちが使用しているヘルパースニペットさ:として

public T FindChild<T>(DependencyObject parent, string childName) 
where T : DependencyObject 
    { 
     // Confirm parent and childName are valid. 
     if (parent == null) return null; 

     T foundChild = null; 

     int childrenCount = VisualTreeHelper.GetChildrenCount(parent); 
     for (int i = 0; i < childrenCount; i++) 
     { 
      var child = VisualTreeHelper.GetChild(parent, i); 
      // If the child is not of the request child type child 
      T childType = child as T; 
      if (childType == null) 
      { 
       // recursively drill down the tree 
       foundChild = FindChild<T>(child, childName); 

       // If the child is found, break so we do not overwrite the found child. 
       if (foundChild != null) break; 
      } 
      else if (!string.IsNullOrEmpty(childName)) 
      { 
       var frameworkElement = child as FrameworkElement; 
       // If the child's name is set for search 
       if (frameworkElement != null && frameworkElement.Name == childName) 
       { 
        // if the child's name is of the request name 
        foundChild = (T)child; 
        break; 
       } 
      } 
      else 
      { 
       // child element found. 
       foundChild = (T)child; 
       break; 
      } 
     } 

     return foundChild; 
    } 

と機能上の呼び出し:

   ScrollViewer scrollViewer = FindChild<ScrollViewer>((this.View.FindName("AdSlider") as ItemsControl) ,"scrollViewer") as ScrollViewer; 

しかし、ScrollViewerのオブジェクトは、常にnull値を持っています。私たちは、datatemplate内で予期される制御を取り出すことができません。なにか提案を ?

ありがとうございました。

答えて

0

1あなたの関数に

変更コントロール名を提供しないでください。私はあなたのサンプルでAdSliderという名前のコントロールが表示されない

ScrollViewer scrollViewer = FindChild<ScrollViewer>((this.View.FindName("AdSlider") as ItemsControl) ,"scrollViewer") as ScrollViewer; 

を。

の中へ:

ScrollViewer scrollViewer = FindChild<ScrollViewer>((this.View.FindName("AdSlider") as ItemsControl) , null); 

2は、あなたのDataTemplateに名前を提供

変更:

<DataTemplate> 

の中へ:

<DataTemplate x:Key="dataTemplate1"> 

3してくださいまた、正しい

<ItemsControl ItemTemplate={StatisSource dataTemplate1}> 

へ:あなたのフィードバックドゥリンのため

<ItemsControl ItemTemplate={StaticSource dataTemplate1}> 
+0

感謝。しかし、あなたが提案したすべてを実行した後、FindChildメソッドは、 '参照は有効なビジュアル依存オブジェクトではありません'という例外を返します。これは、パラメータをDataTemplateとして受け入れないためです。だから私たちは別のメソッドを試しました:((this.View.FindName( "AdvertSlider")としてSlideViewExtended).ItemTemplate.LoadContent()としてScrollViewer)。しかし、このメソッドはUI要素の同じコピーを作成し、ScrollViewerのスクロール動作を操作するのに役立ちません。 – prdp89

+0

私には明らかだったいくつかのエラーを修正しました。しかし、私はあなたが何を探しているのか分からない。また、コードが表示されないpoint2を修正しました。 –

+0

Itemscontrolのdatatemplate内でscrollviewerを検索しようとしています。私たちのタスクは、そのscrollviewerをスクロールすることです。 – prdp89

関連する問題