gpt4 book ai didi

c# - 在运行时更改 ListBox 的 ItemsPanelTemplate

转载 作者:行者123 更新时间:2023-11-30 18:02:22 24 4
gpt4 key购买 nike

我想在运行时更改 ListBox 的 ItemsPanelTemplate。

我有以下 XAML,它允许我更改 ItemsPanelTemplate;但是有破坏 ScrollViewer 的不良副作用。

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ie="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"

...

<UserControl.Resources>
<ItemsPanelTemplate x:Key="StackPanelTemplate">
<VirtualizingStackPanel/>
</ItemsPanelTemplate>

<ItemsPanelTemplate x:Key="WrapPanelTemplate">
<telerik:RadWrapPanel/>
</ItemsPanelTemplate>
</UserControl.Resources>

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel>
<Button Content="StackPanel">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ie:ChangePropertyAction TargetName="TargetListBox" PropertyName="ItemsPanel" Value="{StaticResource StackPanelTemplate}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="WrapPanel">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ie:ChangePropertyAction TargetName="TargetListBox" PropertyName="ItemsPanel" Value="{StaticResource WrapPanelTemplate}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>

<ListBox x:Name="TargetListBox" Grid.Column="1" ItemsSource="{Binding SomeCollection}"/>
</Grid>

当您以这种方式更改 ItemsPanelTemplate 时。 ScrollViewer 似乎保持在您更改它之前的任何状态,并且使用滚动条不会影响 ListBox 上的任何更改。

任何人都可以提供有关此问题的任何见解或提供解决方法吗?

谢谢。

* 编辑 *

因此,我已将问题缩小到与虚拟化相关。如果您仅为常规 StackPanel 更改 VirtualizingStackPanel,则 ScrollViewer 不会中断。这对我来说并不是一个真正的解决方案,因为这个 ListBox 将包含数百个搜索结果。

最佳答案

我认为最简单的解决方法是替换整个 ListBox 而不仅仅是面板模板。

关于c# - 在运行时更改 ListBox 的 ItemsPanelTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8161504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com