WPF中如何使用代码操作数据模板生成的控件

有一个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

你可能感兴趣的:(WPF)