Skip to content

Commit bbdee06

Browse files
MohammadHadi2031MohammadHadi Attarieh
andauthored
fix when the TreeListView expands too much content, scrolling to the top will shrink the content #3640 (#3875)
Related Work Items: #3 Co-authored-by: MohammadHadi Attarieh <mhadi.atttarieh@gmail.com>
1 parent 122a534 commit bbdee06

File tree

2 files changed

+38
-19
lines changed

2 files changed

+38
-19
lines changed

src/MaterialDesignThemes.Wpf/TreeListView.cs

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,24 +51,24 @@ protected override DependencyObject GetContainerForItemOverride()
5151
protected override bool IsItemItsOwnContainerOverride(object? item)
5252
=> item is TreeListViewItem;
5353

54-
protected override void PrepareContainerForItemOverride(DependencyObject element, object? item)
55-
{
56-
base.PrepareContainerForItemOverride(element, item);
54+
//protected override void PrepareContainerForItemOverride(DependencyObject element, object? item)
55+
//{
56+
// base.PrepareContainerForItemOverride(element, item);
5757

58-
if (element is TreeListViewItem treeListViewItem)
59-
{
60-
int level = 0;
61-
bool isExpanded = false;
62-
int index = ItemContainerGenerator.IndexFromContainer(treeListViewItem);
63-
if (index >= 0 && InternalItemsSource is { } itemsSource)
64-
{
65-
level = itemsSource.GetLevel(index);
66-
isExpanded = itemsSource.GetIsExpanded(index);
67-
}
58+
// if (element is TreeListViewItem treeListViewItem)
59+
// {
60+
// int level = 0;
61+
// bool isExpanded = false;
62+
// int index = ItemContainerGenerator.IndexFromContainer(treeListViewItem);
63+
// if (index >= 0 && InternalItemsSource is { } itemsSource)
64+
// {
65+
// level = itemsSource.GetLevel(index);
66+
// isExpanded = itemsSource.GetIsExpanded(index);
67+
// }
6868

69-
treeListViewItem.PrepareTreeListViewItem(item, this, level, isExpanded);
70-
}
71-
}
69+
// treeListViewItem.PrepareTreeListViewItem(item, this, level, isExpanded);
70+
// }
71+
//}
7272

7373
protected override void ClearContainerForItemOverride(DependencyObject element, object item)
7474
{
@@ -86,11 +86,19 @@ internal void ItemExpandedChanged(TreeListViewItem item)
8686
int index = ItemContainerGenerator.IndexFromContainer(item);
8787
//Issue 3572
8888
if (index < 0) return;
89-
var children = item.GetChildren().ToList();
90-
bool isExpanded = item.IsExpanded;
89+
var isExpanded = item.IsExpanded;
90+
var internalIsExpanded = itemsSource.GetIsExpanded(index);
91+
92+
if (internalIsExpanded == isExpanded)
93+
{
94+
return;
95+
}
96+
9197
itemsSource.SetIsExpanded(index, isExpanded);
98+
9299
if (isExpanded)
93100
{
101+
var children = item.GetChildren().ToList();
94102
int parentLevel = itemsSource.GetLevel(index);
95103
for (int i = 0; i < children.Count; i++)
96104
{

src/MaterialDesignThemes.Wpf/TreeListViewItem.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,18 @@ public override void OnApplyTemplate()
146146

147147
void OnTemplateChanged(object? sender, EventArgs e)
148148
{
149-
PrepareTreeListViewItem(Content, TreeListView!, Level, IsExpanded);
149+
int level = 0;
150+
bool isExpanded = false;
151+
int index = TreeListView!.ItemContainerGenerator.IndexFromContainer(this);
152+
153+
154+
if (index >= 0 && TreeListView.InternalItemsSource is { } itemsSource)
155+
{
156+
level = itemsSource.GetLevel(index);
157+
isExpanded = itemsSource.GetIsExpanded(index);
158+
}
159+
160+
PrepareTreeListViewItem(Content, TreeListView, level, isExpanded);
150161
}
151162
}
152163
}

0 commit comments

Comments
 (0)