문제

"ChildItem"을 얻는 데 다음은 더 나은 방법이어야합니다

    TaskItem task = (sender as Canvas).DataContext as TaskItem;
    TaskItem child = Tasks.CreateTask("New task", task);
    TreeViewItem item = treeView.ItemContainerGenerator.ContainerFromItem(task) as TreeViewItem;            

    item.UpdateLayout();
    TreeViewItem childItem = null;
    foreach (var i in item.GetDescendantContainers())
    {
        if (i.GetItem() == child)
            childItem = i;
    }
.

어떤 이유로 item.ItemGenerator.ContainerFromItem (하위)가 작동하지 않습니다 (방금 생성 된 항목으로 인해 켜져 있어야 함)

도움이 되었습니까?

해결책

항목 컨테이너 생성은 비동기식이므로 항목이 추가되는 즉시 컨테이너가 존재할 수 없습니다. ItemContainergenerator에 핸들러를 첨부해야합니다.StatusChanged 이벤트가 있으므로 컨테이너 생성이 완료되면 코드가 알려줍니다.

DR.WPF의 블로그 항목 itemscontrol : 'g'는발전기 " 문제에 대한 좋은 설명을 가지며 상태를 사용하는 예제를 제공합니다.

private void AddScooby()
{
    _scooby = new Character("Scooby Doo");
    Characters.Add(_scooby);
    CharacterListBox.ItemContainerGenerator.StatusChanged
        += OnStatusChanged;
}

private void OnStatusChanged(object sender, EventArgs e)
{
    if (CharacterListBox.ItemContainerGenerator.Status
        == GeneratorStatus.ContainersGenerated)
    {
        CharacterListBox.ItemContainerGenerator.StatusChanged
            -= OnStatusChanged;
        ListBoxItem lbi = CharacterListBox.ItemContainerGenerator
            .ContainerFromItem(_scooby) as ListBoxItem;
        if (lbi != null)
        {
            lbi.IsSelected = true;
        }
    }
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top