Xaml FlipView在调整大小时创建其他FlipViewItem

Xaml FlipView在调整大小时创建其他FlipViewItem,xaml,windows-runtime,uwp,Xaml,Windows Runtime,Uwp,我有一个FlipView,其中包含项目和项目模板。最初加载控件时,会创建三个FlipView项。我注意到,如果在此之后调整窗口大小,则FlipView会决定创建第四个附加项。为了演示这种奇怪的行为,我创建了以下小示例: <Page x:Class="Test.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/win

我有一个
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>
加载页面时,您将在程序输出中看到“文本1”、“文本2”、“文本3”。然后,如果仍在第一项上时尝试调整窗口大小,“文本4”也将出现在输出中

我的问题是:为什么会发生这种情况?我能做些什么来防止它吗?

加载页面时,您将在程序输出中看到“文本1”、“文本2”、“文本3”。然后,如果仍在第一项上时尝试调整窗口大小,“文本4”也将出现在输出中

此行为的根本原因:FlipView正在使用作为其itemsPanel。当您有很多项目时,
virtualzingstackpanel
将根据需要加载这些项目,这将提高性能

为了防止出现这种情况,您只需将itemsPanel替换为其他“非虚拟化面板”:


注意:请注意,禁用FlipView的UI虚拟化可能会对性能产生负面影响,尤其是当存在大量大项目时

加载页面时,您将在程序输出中看到“文本1”、“文本2”、“文本3”。然后,如果仍在第一项上时尝试调整窗口大小,“文本4”也将出现在输出中

此行为的根本原因:FlipView正在使用作为其itemsPanel。当您有很多项目时,
virtualzingstackpanel
将根据需要加载这些项目,这将提高性能

为了防止出现这种情况,您只需将itemsPanel替换为其他“非虚拟化面板”:



注意:请注意,禁用FlipView的UI虚拟化可能会对性能产生负面影响,特别是当有大量大尺寸项目时。

谢谢,我知道这两个面板之间的区别。我确实希望虚拟化能够发生,但我想知道为什么在调整窗口大小时会发生虚拟化,并防止虚拟化。谢谢,我知道这两个面板之间的区别。我确实希望虚拟化能够发生,但我想知道为什么在调整窗口大小时会发生虚拟化,以及如何防止虚拟化。
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);
    }
}
<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>