zoukankan      html  css  js  c++  java
  • 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

    参考:http://msdn.microsoft.com/zh-cn/library/bb613579.aspx

  • 相关阅读:
    页面滚动
    tcbRouter
    http缓存策略
    Ajax跨域
    tcp 3次握手和4次挥手
    http头字段
    http工作原理
    一个下载Windows镜像的地址
    安装MySQL-8.0.13
    配置Java,jdk环境变量
  • 原文地址:https://www.cnblogs.com/pdfw/p/1176568.html
Copyright © 2011-2022 走看看