Я пишу прикрепленное поведениеWPF Treeview Items Visibility Прикрепленного поведение
public class resizingBehavior : Behavior<ItemsControl>
, чтобы определить количество видимых элементов в TreeView.
В методе OnAttached
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Loaded += AssociatedObject_Loaded;
}
Внутри AssociatedObject.Loaded
обработчик события
Я закреплять на размер измененную обработчик событий для моего управления TreeView
private void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
var itemsControl = (ItemsControl)sender;
_sizeChangedEventHandler = (s, f) => ComputeVisibleItemsCount(itemsControl);
var treeListView = AssociatedObject as TreeListView;
treeListView.SizeChanged += _sizeChangedEventHandler;
itemsControl.Loaded -= AssociatedObject_Loaded;
}
Эти события вызывается, когда я загружаю мой приложение и когда я изменяю размер моего дерева. Моя проблема заключается в вычислении видимых элементов внутри древовидной структуры. К сожалению, свойство IsVisible не дает мне правильного результата. Я использовал ответ, предложенный в In WPF, how can I determine whether a control is visible to the user?
Но это не работает для меня. Это дает мне неправильный результат.
Любая хорошая практика или стандартное решение для определения фактических видимых элементов в элементах управления? при изменении размера и прокрутке? Кстати, я использую реактивную коллекцию для своих элементов treeview.