Как создать элемент управления в коде с «загруженным» контейнером - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь создать ItemsControl для модульного теста (поэтому он не будет отображаться ни в одном представлении, это просто для тестирования расширения для itemcontrols).

Проблема в том, что мне нужен весь контейнер этого ItemsControl, который в моем случае является "нулевым".

Это код для генерации моего ItemsControl:

var items = new ObservableCollection<string> { "one", "two", "three", "four" };
var itemsControl = new ItemsControl { Height = 15, ItemsSource = items};
itemsControl.Measure(new Size(0, 100));
itemsControl.Arrange(new Rect(new Size(0,40)));
itemsControl.UpdateLayout();

Я получаю доступ к контейнеру следующим образом:

var itemContainer = (ContentPresenter)itemsControl.ItemContainerGenerator.ContainerFromIndex(0);

Так что, если элемент управления действительно используется в представлении и загружен, он работает, например, если я добавлю этот ItemsControl в StackPanel следующим образом :

this.stackPanel.Children.Add(itemsControl);

После выполнения последней упомянутой строки itemContainer больше не является нулевым, но это не то, что я хочу сделать в модульном тесте.

Is Есть ли другой способ заставить эту загрузку ItemsControl?

...