在WPF中,有很多常用的控件可以帮助我们在实际编程中轻松的完成各种图形界面的相关需求。在这些控件中,有一个叫做WPF Listbox的控件,里面的Item是通过数据模板生成的。#t#
WPF Listbox代码示例如下所示:
- < 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>
使用下面的WPF Listbox代码就可以获取数据模板里面TextBlock中的内容了。
- ListBoxItem myListBoxItem =
(ListBoxItem)(myListBox.Item
ContainerGenerator.Container
FromItem(myListBox.Items.CurrentItem));- ContentPresenter myContent
Presenter = FindVisualChild
< ContentPresenter>(myListBoxItem);- DataTemplate myDataTemplate
= myContentPresenter.ContentTemplate;- TextBlock myTextBlock =
(TextBlock)myDataTemplate.
FindName("textBlock", myContent
Presenter);- 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 = VisualTree
Helper.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;
- }
以上就是我们为大家介绍的WPF Listbox相关概念。