kumar9avinash Ответов: 1

WPF treeview не расширяется правильно в первый раз. Он работает, если загрузка повторяется в том же жизненном цикле


Привет,
я пытаюсь расширить xml-дерево до первого уровня в wpf, я использую для этого прикрепленное свойство.

я столкнулся с проблемой, когда я загружаю xml fo r в первый раз в то время ,

здесь впервые " класс UIElement.ItemContainerGenerator.ContainerFromItem() "возвращает null, но на том же жизненном цикле, если я пытаюсь загрузить xml, это свойство работает правильно.


TreeViewItem treeItem = uiElement.ItemContainerGenerator.ContainerFromItem (item) как TreeViewItem;

кто-нибудь может мне помочь.

Что я уже пробовал:

ниже этой линии дает значение null , эта функция является недействительным ContainerFromItem впервые

TreeViewItem treeItem = uiElement.ItemContainerGenerator.ContainerFromItem (item) как TreeViewItem


частных статических недействительным OnTreeviewPropertyChanged(класс DependencyObject, Д, Е DependencyPropertyChangedEventArgs)
{
пробовать
{
Дерево зависимостей = (дерево)д;
класс UIElement.Метод updatelayout();
TreeViewItem ti = GetItemFromObject(uiElement);

foreach (object item in uiElement.Предметы)
{

TreeViewItem treeItem = uiElement.ItemContainerGenerator.ContainerFromItem (item) как TreeViewItem;


if (treeItem != null)
{
// ExpandAll(treeItem, true);
treeitem, в.IsExpanded = true;
}


}


}
ловить
{

}


}


вид: treeview находится внутри вкладки

< window x: class= " WpfApplication3.MainWindow "xmlns:x=" #unknown " >
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
описание:х="http://schemas.microsoft.com/winfx/2006/xaml"
Title= "MainWindow" Height= " 350 "Width= "525">
& lt;сетка>
& lt;tabcontrol>
& lt;tabitem>
&ЛТ;TreeView элемент имя="xmltree интенсивно"> В поле HorizontalAlignment="стрейч"
Вертикальное Выравнивание= " Растяжение"
ItemTemplate= " {StaticResource NodeTemplate}"
ItemsSource= " {Binding xmldocumrnt, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
Свойстваodevirtualizingstackpanel.IsVirtualizing= " False"
VirtualizingStackPanel. VirtualizationMode= " Переработка Отходов"
ВМ:ExpandXML.Функция OpenXML="{привязки ISXmlExpand,UpdateSourceTrigger=PropertyChanged, как,NotifyOnSourceUpdated=true,то режим=с двусторонним движением}" &ГТ;
&ЛТ;дерево.itemcontainerstyle&ГТ; &ЛТ;стиль формат="{х:тип TreeViewItem}"&ГТ;
< setter property=" FontSize "value= "12">

< / стиль>




Sergey Alexandrovich Kryukov

Пожалуйста, используйте отладчик и посмотрите, где выполняется строка, расширяющая узел, проверьте, происходит ли это вообще или нет.
Вы не показали, где вызывается функция OnTreeviewPropertyChanged.

Другими словами, выполните соответствующую отладочную работу. Когда и если вы узнаете, что происходит, если вы все еще не видите, как исправить код, предоставьте более полную информацию, основанную на ваших наблюдениях. В идеале вы могли бы написать какой-то упрощенный тестовый код, сосредоточившись только на одной проблеме; тогда он может быть достаточно мал, чтобы показать 100% кода. Пожалуйста, смотрите: SSCCE.

—СА

1 Ответов

Рейтинг:
0

mauryasantosh

Hi Avinesh,

 
you can try to add Setter property="IsExpended" value="True".
please find below code as Reference.......  


<TreeView Name="TreeView" BorderThickness="0" Foreground="Black" >
                                <TreeView.ItemContainerStyle>
                                    <Style TargetType="{x:Type TreeViewItem}">
                                        <Setter Property="IsExpanded" Value="True" />
                                    </Style>
                                </TreeView.ItemContainerStyle>

Please vote if it helpful .