2011-01-27 15 views
5

在設計WPF或Silverlight應用程序的UI部分時,我們可以將一些顯示轉換(LayoutTransformRenderTransform)應用於可視元素。一些變革是:WPF(Silverlight)佈局(渲染)轉換對應用程序性能的影響

  • RotateTransform
  • ScaleTransform
  • SkewTransform
  • TranslateTransform

我不知道什麼用這種轉變放慢呈現頁面程度?

更具體一點。例如,我有一個簡單的元素,比如矩形,放在一個頁面上,使用一個Grid和一些StackPanels放入行中。如果我全部或部分申請RotateTransform,它是否會對我的申請表現產生顯着影響?

我當然可以嘗試看看會發生什麼,但也許有些明顯的東西我根本不知道。

回答

1

這裏是您可以使用各種選項進行實驗原型:

<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); 
    } 
} 

與上左上角是這樣的:

transform performance

您可以通過調整大小來觸發佈局e窗口和我的機器上,它有點呆滯但可用。然後,您可以測試其他容器,其他變換,佈局與渲染變換等,以查看它們所產生的差異。

1

LayoutTranform將導致佈局系統全面通過。這將導致所有屏幕上的對象被重新測量和重新排列。這是一個數學密集型操作,與屏幕上的對象數量成正比。

如果這不是你所需要的,那麼使用RenderTransform會更快,因爲它不會導致完整的佈局傳遞。使用某個對象的影響取決於屏幕上顯示的其他對象以及該變換需要應用的對象的情況。