您的位置:首页 > 编程语言

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

2010-04-30 15:42 1436 查看
有一个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐