首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取ListViewItem儿童

获取ListViewItem儿童
EN

Stack Overflow用户
提问于 2013-12-19 14:53:59
回答 1查看 2.9K关注 0票数 2
代码语言:javascript
复制
<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都有以下一行:

代码语言:javascript
复制
ListViewItem lvi = lvPayload.ItemContainerGenerator.ContainerFromIndex(0) as ListViewItem;

是否有办法到达TextBox控件并获取其Text属性?

迈克尔给了我一个答复:

这是FindVisualChild方法:

代码语言:javascript
复制
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的代码

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-19 14:57:23

是的,但是首先您需要给它一个Name属性。在给它起一个名字之后,您可以这样做:

代码语言:javascript
复制
// 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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20684796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档