有没有办法在WPF中“预呈现”列表而不实际向用户显示?我有一个列表,它第一次显示给用户时渲染速度相当慢(几秒钟)。
我想预先渲染/预先绘制列表,以便向用户显示列表所需的几秒钟不明显。我希望在应用程序启动时发生这种情况 - 同时显示我的启动画面。
实现这一目标的最佳方法是什么?
编辑:
这是我的列表项样式。如您所见,目标类型是Button。该按钮还有一个RoutedEvent(Command)设置。
<Style x:Key="Button_ProductFinder_Item" TargetType="Button">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid Width="690" Height="181" >
<Image Name="Up" Source="{StaticResource Img_ProductFinder_FriendUp}" Stretch="Uniform"/>
<Image Name="Down" Source="{StaticResource Img_ProductFinder_FriendDn}" Visibility="Hidden" Stretch="Uniform"/>
<Canvas Name="Clip" ClipToBounds="True" Height="162" Width="175" HorizontalAlignment="Left" Margin="0,10,0,0" >
<Image Name="DynamicFriend" Stretch="UniformToFill" Canvas.Left="16" Canvas.Top="-10" HorizontalAlignment="Left" Source="{Binding ImageSource}" Height="162" Width="162" />
<Canvas.RenderTransform>
<TransformGroup>
<TranslateTransform />
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>
<TextBlock Name="DynamicName" Margin="210,69,0,0" Style="{StaticResource ButtonFriend_Textstyle}"
TextWrapping="Wrap" HorizontalAlignment="Left" Width="440" VerticalAlignment="Stretch" Height="Auto"
Text="{Binding ProductName}" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Up" Property="Visibility" Value="Hidden"/>
<Setter TargetName="Down" Property="Visibility" Value="Visible"/>
<Setter TargetName="Clip" Property="RenderTransform">
<Setter.Value>
<TransformGroup>
<TranslateTransform Y="2"/>
</TransformGroup>
</Setter.Value>
</Setter>
<Setter TargetName="DynamicName" Property="RenderTransform">
<Setter.Value>
<TransformGroup>
<TranslateTransform Y="2"/>
</TransformGroup>
</Setter.Value>
</Setter>
<Setter TargetName="DynamicName" Property="Foreground" Value="#FFFFFF"/>
<Trigger.EnterActions>
<ctrls:ButtonSoundPlayerAction SoundFile="buttonclick.wav"/>
</Trigger.EnterActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:1)
检查什么是慢的。真。这就像数据库填满了列表一样,你的问题完全没了(因为没有WPF实现)。
列表有多大?我有一个5000个元素的列表在瞬间通知。 Mosty因为我的4.0虚拟列表只呈现列表中的内容。填写列表时,您不是数据绑定,或?
最后,什么是慢的?使用wpf探查器找出并告诉我们 - 因为在当天你可能只是尝试优化错误的东西。
答案 1 :(得分:0)
您总是可以将列表(或列表所包含的整个窗口)设置为在其初始状态下折叠,然后在从数据检索线程中获取完成后再解除它。
我已经使用其他几个程序完成了这项工作,但效果非常好。
科里