2013-12-19 90 views
2
<ListView x:Name="lvPayload" Grid.Row="1" ItemsSource="{Binding Payload}" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Value, StringFormat=0x{0:x2}, Mode=OneWay, Converter={StaticResource hexConverter}}" FontSize="15" Margin="2,1,2,1" MinWidth="25" MinHeight="20" VerticalAlignment="Center" HorizontalAlignment="Center"/> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Horizontal" VerticalAlignment="Center"/> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 

我一次ListViewItem與以下行:得到的ListViewItem孩子

ListViewItem lvi = lvPayload.ItemContainerGenerator.ContainerFromIndex(0) as ListViewItem; 

有沒有達到TextBox控制,並得到了Text屬性的方法嗎?

邁克爾給我的迴應:

這是FindVisualChild方法:

public static T FindVisualChild<T>(DependencyObject depObj) where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       return (T)child; 
      } 

      T childItem = FindVisualChild<T>(child); 
      if (childItem != null) return childItem; 
     } 
    } 
    return null; 
} 

和代碼來獲取TextBox

ListViewItem lvi = lvPayload.ItemContainerGenerator.ContainerFromIndex(0) as ListViewItem; 
// Getting the ContentPresenter of lvi 
var cp = FindVisualChild<ContentPresenter>(lvi); 

// Finding textBlock from the DataTemplate that is set on that ContentPresenter 
var dtmpl = cp.ContentTemplate as DataTemplate; 
var tb = (TextBox)dtmpl.FindName("myTb", cp); 

回答

1

是的,但首先你需要給它一個Name屬性。給它一個名字後,你可以這樣做:

// Getting the ContentPresenter of lvi 
var cp = FindVisualChild<ContentPresenter>(lvi); 

// Finding textBlock from the DataTemplate that is set on that ContentPresenter 
var dt = cp.ContentTemplate as DataTemplate; 
var tb = (TextBox)dt.FindName("{name}", cp); 
+0

謝謝但什麼是FindVisualChild方法? –