在我们的应用程序中,我们在ChildWindow
. 显示此窗口时,我们的 CPU 利用率非常高。文本使用的是 aBitmapCache
并且启用了硬件加速。即使在从子窗口中删除剪切矩形和投影后,CPU 使用率也会攀升至 80-90%。当我启用重绘区域可视化时,我看到只有滚动文本被重绘,所以我不确定为什么 CPU 会发疯。Canvas.Top
我尝试对两者和 a 的TranslateY
属性进行动画处理CompositeTransform
以进行滚动。
关于什么可能导致这个动画如此昂贵的任何想法?有没有什么好的文章可以提供一般优化动画的建议?这是我的 XAML:
<c:ChildWindow xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Class="OurNamespace.UI.Views.AboutWindow"
Title="About Our App" Width="575"
Height="330" Style="{StaticResource ChromelessChildWindowStyle}"
mc:Ignorable="d"
MouseRightButtonDown="ChildWindow_MouseRightButtonDown"
Background="Black">
<Grid x:Name="LayoutRoot" CacheMode="BitmapCache">
<Grid.Triggers>
<EventTrigger RoutedEvent="Canvas.Loaded">
<BeginStoryboard>
<Storyboard Storyboard.TargetName="CreditsTransform"
Storyboard.TargetProperty="TranslateY">
<DoubleAnimation To="-750" RepeatBehavior="Forever"
Duration="0:0:30"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
<Image HorizontalAlignment="Left" VerticalAlignment="Top"
Source="/Assets/Graphics/SplashAbout/OurBackground.png"/>
<Grid Height="150" Width="570" HorizontalAlignment="Right"
Margin="0,0,0,80" VerticalAlignment="Bottom">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock x:Name="AppVersionTextBlock" Margin="10,0"
VerticalAlignment="Center" FontFamily="Arial"
FontSize="12" Foreground="White"
Text="{Binding VersionInfo, FallbackValue=Version 2.0.0}"
TextWrapping="Wrap"/>
<TextBlock x:Name="FirmwareVersionTextBlock" Margin="10,0"
VerticalAlignment="Center" FontFamily="Arial" FontSize="12"
Foreground="White" Text="{Binding FirmwareVersion.Value, FallbackValue=Firmware Version 1.0.0}"
TextWrapping="Wrap"
Visibility="{Binding FirmwareVersionVisibility.Value}"
TextAlignment="Right"/>
<Canvas Margin="0" Grid.Row="1" x:Name="Viewport">
<Canvas.Clip>
<RectangleGeometry Rect="0,0,575,120"/>
</Canvas.Clip>
<TextBlock FontFamily="Arial" FontSize="12" Width="555"
Foreground="White" TextWrapping="Wrap" Canvas.Left="10"
Text="{Binding Credits}" x:Name="Credits"
TextAlignment="Center" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform>
<CompositeTransform TranslateY="0" x:Name="CreditsTransform"/>
</TextBlock.RenderTransform>
<TextBlock.CacheMode>
<BitmapCache/>
</TextBlock.CacheMode>
</TextBlock>
</Canvas>
</Grid>
<TextBlock Foreground="White" Text="{Binding CopyrightInfo, FallbackValue=© 2010 Our Company}"
TextWrapping="Wrap" Width="413" FontSize="10"
FontFamily="Arial" Height="44" HorizontalAlignment="Right"
Margin="0,0,30,21" VerticalAlignment="Bottom"/>
<Button x:Name="CancelButton" Width="575" Height="330" Opacity="0"
Click="CancelButton_Click" HorizontalAlignment="Right"
Margin="0" VerticalAlignment="Bottom"/>
</Grid>
</c:ChildWindow>
更新:
CPU 问题与其ChildWindow
本身没有直接关系,而是与DropShadowEffect
Silverlight 浪费性地重新渲染的对象有关。我添加了一个答案来描述我如何解决这个问题。