我有FlipView
项目和项目模板。最初加载控件时,会创建三个FlipView项。我注意到,如果我在此之后调整窗口大小,FlipView
决定创建另外的第四个项目。为了证明这种奇怪的行为,我创建了以下小例子:
<Page
x:Class="Test.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Test"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid>
<FlipView x:Name="items">
<FlipView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Loaded="TextBlock_Loaded"/>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
</Grid>
这就是代码隐藏:
public sealed partial class MainPage : Page
{
public MainPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
items.ItemsSource = new string[] { "Text 1", "Text 2", "Text 3", "Text 4" };
}
private void TextBlock_Loaded(object sender, RoutedEventArgs e)
{
var textBlock = sender as TextBlock;
System.Diagnostics.Debug.WriteLine(textBlock.Text);
}
}
加载页面后,您将看到&#34;文字1&#34;,&#34;文字2&#34;,&#34;文字3&#34;在程序输出中。然后,如果您仍然在第一个项目上尝试调整窗口大小,&#34;文本4&#34;也将出现在输出中。
我的问题是:为什么会发生这种情况,我可以做些什么来阻止它吗?
答案 0 :(得分:0)
加载页面后,您将在程序输出中看到“文本1”,“文本2”,“文本3”。然后,如果您仍然在第一个项目上尝试调整窗口大小,则“文本4”也将出现在输出中。
此行为的根本原因:FlipView使用VirtualizingStackPanel作为其itemsPanel。如果您有很多项目VirtualizingStackPanel
将根据需要加载项目,这将提高性能。
要防止它,您只需要将itemsPanel替换为其他“非虚拟化面板”:
<FlipView x:Name="items" Style="{StaticResource FlipViewStyle1}">
<FlipView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</FlipView.ItemsPanel>
<FlipView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Loaded="TextBlock_Loaded"/>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
注意:请注意,禁用FlipView的UI虚拟化可能会对性能产生负面影响,尤其是在存在大量项目的情况下。