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>