मेरे पास एक 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