2017-01-10 133 views
1

我在畫布內有10個矩形,在ManipulationDelta事件中,我必須改變高度和寬度。它在Windows桌面上正常工作,但在操縱矩形時,通用Windows設備(手機)需要一些時間。如何順利操作Windows設備中的UI元素。請告訴我,是否有其他解決這個問題的方法?改善通用Windows手機的性能?

這裏是我的代碼:

<Canvas Name="LayoutRoot" Width="300" Height="500"> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Red" Height="100" Width="100"/> 
    <Rectangle Fill="Green" Height="100" Width="100"/> 
</Canvas> 


private void MainPage_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 
{  
    foreach (Rectangle rectAngle in LayoutRoot.Children) 
    { 
     rectAngle.Width += e.Cumulative.Scale; 
     rectAngle.Height += e.Cumulative.Scale; 
     Canvas.SetLeft(rectAngle, LayoutRoot.Width/2 - rectAngle.ActualWidth/2); 
     Canvas.SetTop(rectAngle, LayoutRoot.Height/2 - rectAngle.ActualHeight/2); 
    } 
} 
+0

一個可能的解決方案是使用Win2D庫。 Win2D是一個GPU加速的圖形渲染庫。 – frenk91

回答

1

你必須使用的RenderTransform像TranslateTransform移動你的元素,因爲它們不依賴特性,是面向性能。因此改爲使用Canvas Top和Left屬性設置RenderTransformOrigin和TranslateTransform。

你會注意到一個真正提高的性能。

private void MainPage_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 
    { 
     foreach (Rectangle child in LayoutRoot.Children) 
     { 
      child.Width += e.Cumulative.Scale; 
      child.Height += e.Cumulative.Scale; 

      //This is C#7 in case C#6 adapt 
      if(child.RenderTransform is TranslateTransform tf) 
      { 
       tf.X = LayoutRoot.Width/2 - child.ActualWidth/2; 
       tf.Y = LayoutRoot.Height/2 - child.ActualHeight/2; 
      } 
     } 

    } 

    private void Initialize() 
    { 
     var redbrush = new SolidColorBrush(Colors.Red); 

     foreach (Rectangle child in LayoutRoot.Children) 
     { 
      child.Fill = redbrush; 
      child.Height = 100; 
      child.Width = 100; 
      child.RenderTransformOrigin = new Point(0.5, 0.5); 
      child.RenderTransform = new TranslateTransform(); 
     } 
    } 
+0

謝謝..那麼它是如何工作在Windows桌面?爲什麼Windows設備需要時間? – Santhiya

+0

@Santhiya手機的低功耗和處理能力意味着性能將低於桌面。 –