Échelle WinRT (C # / XAML) sans flou

J’ai mis en place une animation de base qui a une échelle de contrôle de 0,1 à 1,0 (x & y). Le problème que je ne cesse de voir est ce “flou” desdits contrôles avant qu’ils ne se posent sur l’état statique final.

Un exemple est cette caméra que j’ai prise.

Regarder la caméra

Je ne suis pas sûr de ce qui cause cela. C’est une animation / storyboard par défaut que vous générez via Blend.

            

Le dit contrôle:

              

Remarque:

  • Ce flou a été confirmé à la fois sur un PC Windows 8 et sur une tablette Surface RT à partir de deux sources indépendantes (c’est-à-dire non spécifiques au matériel).
  • J’ai essayé BitmapCache pour voir si cela avait des modifications (pire que cela aurait été le cas).

Semble comme un bug. Apparemment, WinRT transforme automatiquement CacheMode en BitmapCache pendant les animations et met en cache l’object à petite échelle. Bien que je ne puisse pas reproduire ce que vous voyez maintenant, j’ai eu un problème similaire dans l’une des versions préliminaires de Windows 8 lors de l’animation des propriétés de projection de TextBlocks. Je pense que ce qui se passe est probablement qu’il utilise la plus grande taille de votre contrôle utilisé avant de lancer l’animation pour déterminer la valeur de la propriété RenderAtScale utilisée pour BitmapCache (qui n’est pas disponible dans WinRT mais existe dans Silverlight ou WPF). existe dans WinRT, il n’est juste pas exposé aux utilisateurs de l’API). Une solution de contournement pourrait alors être de définir de manière invisible les valeurs ScaleX / ScaleY de votre bitmap sur 1 lors du chargement, puis de revenir à la valeur 0.2 avant que le bitmap ne s’affiche pour la première fois. Sinon, l’opacité du contrôle peut être définie sur 0 et mise à l’échelle sur 1 avant le début de l’animation, puis un fondu dans le contrôle après l’animation de l’échelle sur 0,2. Si vous avez vraiment besoin du petit avant l’animation – vous pourriez avoir deux copies du contrôle – une petite qui disparaît juste après le début de l’animation et une autre qui commence grosse mais invisible (ou à Opacité = “0.005”) ) et s’anime très rapidement à l’opacité 1, échelle 0.2 lorsque l’animation commence.

Cela me semblait bien:

                                                using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace App76 { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); ct.ScaleX = 1; ct.ScaleY = 1; this.Loaded += MainPage_Loaded; } void MainPage_Loaded(object sender, RoutedEventArgs e) { ct.ScaleX = 0.2; ct.ScaleY = 0.2; } private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { anim.Begin(); } } } 

Définissez UseLayoutRounding = “True” pour UIBorder