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

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

2008-04-29 17:25 931 查看
有一个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

{

{

{

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