Question

Essayer de faire fonctionner cet exemple à partir de http://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-effect-with-WPF.aspx

Cependant, il semble que l’espace de nom ou la syntaxe ne soit pas correct pour "Processus". ci-dessous.

<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>

Le blog poursuit en disant .....

Il suffit de mettre deux fonctions pour masquer et d’afficher la boîte de dialogue. Le code total est donné ci-dessous. Dans le code ci-dessous, j'ai affiché un écran de chargement avec effet de boîte à lumière. Lors de l’affichage de la boîte de dialogue modale, il suffit d’appeler les méthodes d’affichage et de masquage des écrans d’attente. Il est bon d’envoyer vos tâches d’expansion cpu au fil d’arrière-plan et d’utiliser le répartiteur pour mettre à jour l’UI pendant que vous êtes dans le fil d’arrière-plan.

<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>

Voici le code ci-dessous

#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

J'ai des problèmes avec ces lignes spécifiquement:

Process del = new Process(ShowWaitScreenUI);

Le seul processus que je puisse trouver est dans System.Diagnostics et ne prend aucun argument. Le billet de blog que j'essaie d'apprendre ou est-ce que je suis au mauvais endroit?

Était-ce utile?

La solution

Typos here: Process and ShowWaitScreenHandler doit être remplacé par ShowWaitScreenUIHandler.

DispatcherPriority nécessite une utilisation. Cliquez avec le bouton droit sur DispatcherPriority et sélectionnez Résoudre.

Autres conseils

On dirait que la personne qui a écrit le blog a oublié de définir son délégué personnalisé appelé Process (un nom étrange pour celui-ci).

private delegate void Process();

Il devrait maintenant compiler avec le paramètre défini.

Mais j'aime bien ce genre de noms.

private delegate void HideWaitScreenHandler();
private delegate void ShowWaitScreenHandler();

En fait, vous pouvez reformuler ceci pour le rendre plus simple.

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top