【发布时间】:2023-04-06 09:11:01
【问题描述】:
我有一个 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 的项目)并且我更改视图时,显示的列表框的可见区域将重置回第一个索引(但选定的项目仍然被选中,只是未显示)。
我尝试使用解决方案 here 滚动到所选项目并将其设置为中心来解决此问题。但目前,有时这种行为似乎不稳定,因为列表框中的第一个项目首先显示,然后跳转到所选项目。还有其他替代方案吗?
谢谢!
【问题讨论】: