WPF中如何使用代码操作数据模板生成的控件
来源:互联网 发布:万科商业地产数据 编辑:程序博客网 时间:2024/04/29 02:45
有一个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>
<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中的内容了。
<TextBlock Name="textBlock" FontSize="14">
<TextBlock.Text>
<Binding XPath="Title"/>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
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);
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;
}
{
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
- WPF中如何使用代码操作数据模板生成的控件
- WinForm中如何使用WPF中的控件
- WPF开发ArcGIS时候,Graphic模板中不能使用ViewBox控件的原因说明
- WPF模板(一):控件模板、数据模板、面板模板
- WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)
- WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)
- WPF新手之如何获得Template生成的控件
- 如何使用WPF图表控件Chart FX进行数据转换
- WPF中ListBox控件的使用
- C# WinForm中使用WPF的控件
- WPF中GridSplitter控件的使用
- WPF 新线程中使用Invoke操作页面控件
- Winform中代码生成的控件如何覆盖之前的控件
- 如何在WPF应用程序中使用视频处理控件TVideoGrabber
- 如何操作Excel模板,往Excel模板中写入数据
- 如何在WPF项目中使用ArcEngine的控件做开发
- [转] 使用模板自定义 WPF 控件
- [转] 使用模板自定义 WPF 控件
- WPF样式(Style)与模板(Template)
- SQLite3.0 开发接口简介
- POJ 2231 Moo Volume(排序+简单公式推导)
- java FTP操作
- Oracle数据导入导出
- WPF中如何使用代码操作数据模板生成的控件
- Flex Timer定时器的应用(转)
- JAVA和Flex敏捷调用(一)
- pku1840 Eqs
- 使用Qt编写模块化插件式应用程序
- 刚毕业的路怎么走
- Windows NLB搭配IIS的ARR搭建高可用环境
- 原:(已经解决)VS 2008初始化代码管理器失败
- myeclipse7.5 注册码