在Listbox.ItemTemplate中找到控件(WPF C#)
发布时间:2020-12-15 08:27:59 所属栏目:百科 来源:网络整理
导读:我在StackPanel中找到正确的TextBlock控件时遇到了一些问题. 我的加价: ListBox Name="lstTimeline" ItemContainerStyle="{StaticResource TwItemStyle}" MouseDoubleClick="lstTimeline_MouseDoubleClick" ListBox.ItemTemplate DataTemplate DockPanel Ma
我在StackPanel中找到正确的TextBlock控件时遇到了一些问题.
我的加价: <ListBox Name="lstTimeline" ItemContainerStyle="{StaticResource TwItemStyle}" MouseDoubleClick="lstTimeline_MouseDoubleClick"> <ListBox.ItemTemplate> <DataTemplate> <DockPanel MaxWidth="{Binding ElementName=lstTimeline,Path=ActualWidth}"> <Border Margin="10" DockPanel.Dock="Left" BorderBrush="White" BorderThickness="1" Height="48" Width="48" HorizontalAlignment="Center"> <Image Source="{Binding ThumbNail,IsAsync=True}" Height="48" Width="48" /> </Border> <StackPanel Name="stkPanel" Margin="10" DockPanel.Dock="Right"> <TextBlock Text="{Binding UserName}" FontWeight="Bold" FontSize="18" /> <TextBlock Text="{Binding Text}" Margin="0,4,0" FontSize="14" Foreground="#c6de96" TextWrapping="WrapWithOverflow" /> <TextBlock Text="{Binding ApproximateTime}" FontSize="14" FontFamily="Georgia" FontStyle="Italic" Foreground="#BBB" /> <TextBlock Text="{Binding ScreenName}" Name="lblScreenName" FontSize="14" FontFamily="Georgia" FontStyle="Italic" Foreground="#BBB" Loaded="lblScreenName_Loaded" /> </StackPanel> </DockPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> 我的双击代码: private void lstTimeline_MouseDoubleClick(object sender,MouseButtonEventArgs e) { ListBoxItem lbi = (lstTimeline.SelectedItem as ListBoxItem); StackPanel item = lbi.FindName("stkPanel") as StackPanel; if (item != null) MessageBox.Show("StackPanel null"); TextBlock textBox = item.FindName("lblScreenName") as TextBlock; if (textBox != null) MessageBox.Show("TextBlock null"); MessageBox.Show(textBox.Text); } 但StackPanel为空.如何在SelectedItem中找到正确的TextBlock? 谢谢你的帮助. 解决方法ListBoxItem myListBoxItem = (ListBoxItem)(lstUniqueIds.ItemContainerGenerator.ContainerFromIndex(lstUniqueIds.SelectedIndex)); ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(myListBoxItem); DataTemplate myDataTemplate = myContentPresenter.ContentTemplate; CheckBox target = (CheckBox)myDataTemplate.FindName("chkUniqueId",myContentPresenter); if (target.IsChecked) { target.IsChecked = false; } else { target.IsChecked = true; } 函数FindVisualChild可以在MSDN页面FrameworkTemplate.FindName Method上找到: 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |