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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值