WPF 预渲染一个列表而不实际显示它

标签 wpf list prerender

有没有办法在 WPF 中“预渲染”列表而不实际向用户显示?我有一个列表在第一次显示给用户时呈现相当缓慢(几秒钟)。

我想预渲染/预绘制列表,以便向用户显示列表所需的几秒钟时间不明显。我希望在应用程序启动时发生这种情况 - 在显示我的启动画面时。

实现这一目标的最佳方法是什么?

编辑:

这是我的列表项样式。如您所见,目标类型是按钮。该按钮上还设置了一个 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>

最佳答案

  • 检查什么是慢的。真的。如果它就像数据库填满了列表,那么你的问题就完全没有了(因为性能不是 WPF 的)。
  • list 有多大?我有一个立即渲染的 5000 个元素的列表。大多数是因为我的 4.0 虚拟列表只呈现列表中的内容。填写列表时您没有数据绑定(bind),或者?
  • 最后,什么是rdering慢?使用 wpf 分析器找出并告诉我们 - 因为在一天结束时,您可能只是尝试优化错误的东西。
  • 关于WPF 预渲染一个列表而不实际显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4491365/

    相关文章:

    c - 单链表输出

    angularjs - 使用 nginx 和 ssl 配置 prerender.io

    c# - WPF DataGrid RowDetails 绑定(bind)到属性的可见性(仅限 XAML)

    python - 查找列表的 x 最小值的索引

    java - 从链表中删除任何元素所需时间复杂度为 O(1) - Java 与 C++

    reactjs - React-snap 并注册 service worker

    angularjs - Asp.net core中的SPA预渲染?

    c# - 在 WPF 日历上标记特定日期

    c# - 遇到 MySQL 异常问题

    c# - WPF + 符号在 xaml 中做什么