随笔 - 52  文章 - 0  评论 - 31  0
有一个Listbox,里面的Item是通过数据模板生成的,如下所示:
<Border Margin="15" BorderBrush="Aqua" BorderThickness="2" Padding="8" CornerRadius="5">
      
<StackPanel>
        
<ListBox Name="myListBox" ItemTemplate="{StaticResource myDataTemplate}"
                 IsSynchronizedWithCurrentItem
="True">
          
<ListBox.ItemsSource>
            
<Binding Source="{StaticResource InventoryData}" XPath="Books/Book"/>
          
</ListBox.ItemsSource>
        
</ListBox>
        
<Button Margin="10"
                Click
="DataTemplateFindElement">Get text of textBlock in DataTemplate</Button>
      
</StackPanel>
    
</Border>
Listbox使用的数据模板如下: 
<DataTemplate x:Key="myDataTemplate">
      
<TextBlock Name="textBlock" FontSize="14">
        
<TextBlock.Text>
          
<Binding XPath="Title"/>
        
</TextBlock.Text>
      
</TextBlock>
    
</DataTemplate>
使用下面的代码就可以获取数据模板里面TextBlock中的内容了。
ListBoxItem myListBoxItem = (ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem(myListBox.Items.CurrentItem));
ContentPresenter myContentPresenter 
= FindVisualChild<ContentPresenter>(myListBoxItem);
DataTemplate myDataTemplate 
= myContentPresenter.ContentTemplate;    
  TextBlock myTextBlock 
= (TextBlock)myDataTemplate.FindName("textBlock", myContentPresenter);
MessageBox.Show(
"The text of the named TextBlock in the DataTemplate of the selected list item: " + myTextBlock.Text);
上面代码调用的函数如下:
private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
    
{
        
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        
{
            DependencyObject child 
= VisualTreeHelper.GetChild(obj, i);
            
if (child != null && child is childItem)
                
return (childItem)child;
            
else
            
{
                childItem childOfChild 
= FindVisualChild<childItem>(child);
                
if (childOfChild != null)
                    
return childOfChild;
            }

        }

        
return null;
    }

原文出处:http://blogs.msdn.com/wpfsdk/archive/2007/04/16/how-do-i-programmatically-interact-with-template-generated-elements-part-ii.aspx

参考:http://msdn.microsoft.com/zh-cn/library/bb613579.aspx

posted on 2008-04-29 17:25 pdfw 阅读(...) 评论(...) 编辑 收藏