Comment puis-je éviter le scintillement dans une application en plein écran WPF?

J'ai une application WPF qui est un plein écran kiosque app. C'est en fait une assez compliqué d'application à ce moment, mais voici un code qui indique l'idée de base. Essentiellement, chaque fois que l'utilisateur passe d'un écran à l'autre, il y a un peu de sérieux scintillement d'aller sur la mise en place de la nouvelle fenêtre. Dans les cas graves, le bureau s'affiche pendant quelques secondes avant que le nouvel écran s'affiche. Qui n'a pas lieu dans cet exemple de code, parce que c'est tellement simple, mais ajouter un peu plus de boutons et de styles, et vous le verrez.

App.xaml.cs:

public partial class App : Application {
    Manager mManager;
    public App() {
        mManager = new Manager();
        Window1 screen1 = new Window1(mManager);
        mManager.Screen1 = screen1;
        try {
            this.Run(screen1);
        } catch (Exception e) {
            System.Console.WriteLine(e.ToString());                
        } finally {
            Application.Current.Shutdown();
        }
    }
}

Window1.xaml.cs:

public partial class Window1 : Window {
    Manager Manager{get; set;}
    public Window1(Manager inManager) {
        InitializeComponent();
        Manager = inManager;
    }

    private void OnChangeScreen(object sender, RoutedEventArgs e) {
        Manager.OpenScreen2();
    }
}

Window2.xaml.cs:

public partial class Window2 : Window {
    Manager Manager{get; set;}
    public Window2(Manager inManager) {
        InitializeComponent();
        Manager = inManager;
    }

    private void OnChangeScreen(object sender, RoutedEventArgs e) {
        Manager.OpenScreen1();
    }
}

Manager.cs:

public class Manager {
    public Window1 Screen1{ get; set;}
    public Window2 Screen2{ get; set;}

    public Manager(){
        Screen1 = new Window1(this);
    }

    public void OpenScreen2() {
        Screen2 = new Window2(this);
        Screen2.Show();
        if (Screen1 != null) {
            Screen1.Hide();
        }
    }

    public void OpenScreen1() {
        Screen1 = new Window1(this);
        Screen1.Show();
        if (Screen2 != null) {
            Screen2.Hide();
        }
    }
}

Window1.xaml (essentiellement imité par window2.xaml):

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" 
        WindowStyle="None"
        WindowState="Maximized"
        Width="1280"
        Height="1024"
        FontFamily="Global User Interface"
        ResizeMode="NoResize">

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Button Name="ChangeScreenButton" Click="OnChangeScreen" Grid.Row="2" Grid.Column="2" Content="Toggle Screen 2"></Button>
    </Grid>
</Window>

L'entrelacement de l'affiche des deux fenêtres (c'est à dire, montrer la fenêtre 1 avant la suppression de la fenêtre 2, etc) ne change pas le scintillement de comportement. Dans cette simple application, il serait possible de simplement masquer les autres écrans qui ne sont pas indiquées, mais en plus compliqué d'application, il n'y a tout simplement trop d'informations d'état pour gérer les informations de l'écran facilement et correctement.

Est-il un peu de magie, un mot de code ou de la technique pour éviter le scintillement qui serait à l'œuvre dans cette application simple qui s'adapte aussi à l'application plus complexe? Je suis inquiet que je vais être obligée de réécrire l'intégralité de l'INTERFACE utilisateur à ce stade pour soutenir le masquage et l'affichage, et c'est juste pas possible dans mon calendrier.

EDIT: j'ai essayé de la cacher/montrer des chose sur certaines boîtes de dialogue, et il ne semble pas à la matière. Peut-être que c'est parce que le principal kiosque app est un style lourd?

source d'informationauteur mmr