У меня есть ListBox, стиль и ItemTemplate которого я изменяю в коде при нажатии определенных кнопок.
listbox.ItemTemplate = FindResource("dataTemplateView1") as DataTemplate;
listbox.Style = FindResource("listBoxStyle1") as Style;
Существует три возможных вида, поэтому существует три набора шаблонов и стилей данных. DataTemplate содержит текст и миниатюры (разные размеры для набора). Стили просто изменяют шаблон ItemsPanelTemplate на WrapPanel, StackPanel (горизонтальный) и StackPanel (вертикальный). Пример:
<Style x:Key="listBoxStyle1" TargetType={x:Type ListBox}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
Проблема в том, что когда у меня есть выбранный элемент (скажем, элемент с индексом 20), и я меняю вид, видимая область показанного списка будет сброшена до первого индекса (но выбранный элемент все еще выбран, просто не показано).
Я попытался решить эту проблему, используя решение здесь , чтобы прокрутить до выбранного элемента и установить его в центр. Но в настоящее время бывают ситуации, когда поведение кажется нестабильным, поскольку происходит то, что первый элемент в списке отображается первым, а затем переходит к выбранному элементу. Есть ли другие альтернативы для этого?
Спасибо!