2012-11-26 47 views
1

我想访问WPF列表框中的所有按钮,这里是我的xaml代码。查找WPF列表框中的所有控件

<Grid> 
    <ScrollViewer x:Name="myScrollViewer" HorizontalScrollBarVisibility="Disabled" MouseDown="myStackPanel_MouseDown" MouseUp="myScrollViewer_MouseMove" VerticalScrollBarVisibility="Hidden" Height="435" BorderBrush="{x:Null}" Width="250" Margin="0,-4,-4,-4" ScrollChanged="scrollerVideoCategory_ScrollChanged"> 
     <StackPanel Orientation="Vertical" Name="StackPanleEmployee" Margin="40,0,0,0" MouseDown="myStackPanel_MouseDown" MouseUp="myScrollViewer_MouseMove" Loaded="StackPanleVideoCategory_Loaded" > 
      <ListBox x:Name="ListBoxEmployeVideoType" MouseDown="myStackPanel_MouseDown" MouseUp="myScrollViewer_MouseMove" BorderThickness="0,1,0,0" BorderBrush="#E2E2E2"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Vertical" Width="200" Name="myStackPanel" MouseDown="myStackPanel_MouseDown" MouseUp="myScrollViewer_MouseMove" > 
          <Button VerticalAlignment="Center" Style="{StaticResource ButtonVideoTabItemDefault}" MouseUp="b_MouseMove" Tag="{Binding Path}" Content="{Binding Name}" Name="btnSubCategory" Click="btnVideoCategorySelection_Click"></Button> 
          <Separator Background="#E2E2E2" Margin="0"/> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </StackPanel> 
    </ScrollViewer> 
</Grid> 

有没有想法?

+0

您忘记了发布代码 – 888

回答

0

您可以使用VisualTreeHelper或LogicalTreeHelper类的GetChildren()方法。 Ref SDK

可视化树代表在UI中呈现的所有元素,而UI的逻辑树基本结构。你可以阅读关于使用的详细信息here

希望这会有所帮助。

3

财产以后这样就可以做的伎俩

 /// <summary> 
     /// Finds the visual child. 
     /// </summary> 
     /// <typeparam name="childItem">The type of the child item.</typeparam> 
     /// <param name="obj">The obj.</param> 
     /// <returns></returns> 
     private IEnumerable<T> FindVisualChildren<T>(DependencyObject obj) where T : DependencyObject 
     { 
      for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) 
      { 
       DependencyObject child = VisualTreeHelper.GetChild(obj, i); 
       if (child != null && child is T) 
       { 
        yield return (T)child; 
       } 
       else 
       { 
        var childOfChild = FindVisualChildren<T>(child); 
        if (childOfChild != null) 
        { 
         foreach (var subchild in childOfChild) 
         { 
          yield return subchild; 
         } 
        } 
       } 
      } 
     } 

只是声明你想要的类型,并包含这些

var buttons = FindVisualChildren<Button>(ListBoxEmployeVideoType).ToList(); 

控制这仅仅是一个简单的例子,并可以扩展到您的需要。