WPF-Namespace Frage - Prozess?
-
19-08-2019 - |
Frage
Der Versuch, dieses Beispiel zu bekommen Arbeit von http://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-effect-with-WPF.aspx
Allerdings kann ich nicht scheinen, den Namespace oder Syntax rechts für „Process“ unten zu erhalten.
<Border x:Name="panelDialog" Visibility="Collapsed">
<Grid>
<Border Background="Black" Opacity="0.49"></Border>
<!--While Xmal Content of the dialog will go here-->
</Grid>
</Border>
Die Blog-Post geht weiter zu sagen .....
Einfach zwei Funktion für auszublenden und den Dialog anzuzeigen. Gesamt-Code ist unten angegeben. In brüllen Code habe ich einen Ladebildschirm mit Licht-Box-Effekt angezeigt. Wenn modalen Dialog Anzeige nur Show aufrufen und verstecken Bildschirm Methoden warten. Seine gute CPU expansive Arbeitsplätze Hintergrund-Thread zu senden und Dispatcher UI zu aktualisieren, während Sie im Hintergrund-Thread sind.
<Page x:Class="Home">
<Grid>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<!--All the contents will go here-->
</ScrollViewer>
<Border x:Name="panelLoading" Visibility="Collapsed">
<Grid>
<Border Background="Black" Opacity="0.49"></Border>
<local:TMEWaitScreen></local:TMEWaitScreen>
</Grid>
</Border>
</Grid>
</Page>
Hier ist der Code-Behind
#region About Wait Screen
/// <summary>
/// Show wait screen before a web request
/// </summary>
public void ShowWaitScreen()
{
Process del = new Process(ShowWaitScreenUI);
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, del);
}
private void ShowWaitScreenUI()
{
panelLoading.Visibility = Visibility.Visible;
}
/// <summary>
/// Hide a wait screen after a web request
/// </summary>
public void HideWaitScreen()
{
Process del = new Process(HideWaitScreenUI);
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, del);
}
private void HideWaitScreenUI()
{
panelLoading.Visibility = Visibility.Collapsed;
}
#endregion
Ich habe Probleme mit diesen Zeilen im Einzelnen:
Process del = new Process(ShowWaitScreenUI);
Der einzige Prozess-I finden kann, ist in System.Diagnostics und keine Argumente hat. Ist die Blog-Post Ich versuche, aus dem Off zu lernen, oder bin ich nur an der falschen Stelle?
Lösung
Typos hier:. Prozess- und ShowWaitScreenHandler muss geändert ShowWaitScreenUIHandler werden
DispatcherPriority braucht eine Verwendung. Rechtsklick auf DispatcherPriority und wählen Sie Resolve.
Andere Tipps
Sieht aus wie die Person, die das Blog schrieb vergaß ihren benutzerdefinierten Delegaten genannt Prozess (ein bisschen einen komischen Namen für sie) zu definieren.
private delegate void Process();
Es sollte nun kompilieren damit definiert.
Aber Ich mag diese Art von Namen statt.
private delegate void HideWaitScreenHandler();
private delegate void ShowWaitScreenHandler();
Eigentlich kann man Refactoring dies einfacher zu machen.
private delegate void ShowWaitScreenUIHandler(bool show);
void ShowWaitScreenUIThreaded(bool show)
{
Process del = new ShowWaitScreenHandler(OnShowWaitScreenUI);
Dispatcher.Invoke(DispatcherPriority.Normal, del, show);
}
void OnShowWaitScreenUI(bool show)
{
panelLoading.Visibility = show ? Visibility.Visible : Visibility.Collapsed;
}