Несколько вещей, которые нужно добавить к ответу Мелеака (и это было слишком долго, чтобы добавить комментарий).
Обычно способ получения именованного элемента из шаблона в WPF - это вызовметод FindName шаблона.Однако, поскольку шаблоны в основном являются фабриками, вам также необходимо указать, какой конкретный экземпляр шаблона вам требуется - один экземпляр ItemsPanelTemplate мог быть создан несколько раз.Так что вам нужно что-то вроде этого:
var grid = (UniformGrid) listBox.ItemsPanel.FindName("grid", ???);
Но что в этом такого ???заполнитель?Это не сам ListBox - ListBox на самом деле не использует эту ItemsPanel напрямую.В конечном счете, он используется ItemsPresenter в шаблоне ListBox.Так что вам нужно сделать это:
var grid = (UniformGrid) listBox.ItemsPanel.FindName("grid", myItemsPresenter);
... за исключением того, что нет надежного способа завладеть ItemsPresenter.На самом деле их может даже не быть - законно создать шаблон для ListBox, который просто предоставляет панель хостинга напрямую - для этой цели есть даже специальное свойство Panel.IsItemsHost.приводит ко второму пункту, который я хотел добавить.В тех случаях, когда шаблон ListBox не использует ItemsPresenter, панель ItemsPanel не будет использоваться.Таким образом, вполне возможно, что UniformGrid, который вы пытаетесь получить, даже не существует.