我有一个WPF应用程序,它是一个全屏自助服务终端应用程序。这实际上是一个非常复杂的应用程序,但是这里有一些代码显示了基本的想法。从本质上讲,无论用户何时从一个屏幕进入下一个屏幕,都会出现一些严重的闪烁,从而引发新的窗口。在严重情况下,在新屏幕出现之前,桌面会显示几秒钟。在这个示例代码中不会发生这种情况,因为它非常简单,但添加了更多的按钮和样式,您将看到它。如何避免在WPF全屏应用程序中闪烁?
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(基本上由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>
交错的两个窗口的显示(即,示出删除窗口2等前窗1)不改变闪烁行为。在这个简单的应用程序中,可以隐藏未显示的其他屏幕,但在更复杂的应用程序中,只有太多的状态信息才能正确,轻松地管理屏幕信息。
是否有一些神奇的代码字或技术,以避免闪烁,将在这个简单的应用程序,也扩展到更复杂的应用程序工作?我担心在这一点上我将被迫重写整个用户界面以支持隐藏和显示,这在我的时间范围内是不可行的。
编辑:我试过隐藏/显示的东西在一些对话框上,它似乎并不重要。也许这是因为主亭应用风格沉重?
感谢您的解释。 – mmr 2010-03-02 17:03:11