在设计
WPF或Silverlight应用程序的UI部分时,我们可以将一些显示转换(LayoutTransform或RenderTransform)应用于可视元素.其中一些转变是:
> RotateTransform
> ScaleTransform
> SkewTransform
> TranslateTransform
我想知道使用这种转换在多大程度上减慢了渲染页面的速度?
更具体.例如,我在页面上有一千个简单元素,比如矩形,使用网格和一些StackPanel放入行中.如果我对所有或部分应用RotateTransform,它会对我的应用程序的性能产生显着影响吗?
当然,我可以尝试看看会发生什么,但也许有一些我根本不知道的显而易见的事情.
解决方法
这是您可以用来试验各种选项的原型:
<Grid> <Grid.Resources> <local:Range x:Key="sampleData" Minimum="1" Maximum="900"/> </Grid.Resources> <ItemsControl ItemsSource="{StaticResource sampleData}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Rows="30" Columns="30"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" FontSize="8"> <TextBlock.LayoutTransform> <RotateTransform Angle="30"/> </TextBlock.LayoutTransform> </TextBlock> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </Grid>
和数据生成器:
class Range : List<int>,ISupportInitialize { public int Minimum { get; set; } public int Maximum { get; set; } public void BeginInit() { } public void EndInit() { for (int i = Minimum; i <= Maximum; i++) Add(i); } }
左上角看起来像这样:
您可以通过调整窗口大小来触发布局,在我的机器上它有点迟钝但可用.然后,您可以测试其他容器,其他变换,布局与渲染变换等,以查看它们之间的差异.