Domanda

Prova a far funzionare questo esempio da http://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-effect-with-WPF.aspx

Tuttavia, non riesco a trovare lo spazio dei nomi o la sintassi giusta per "Processo" qui di seguito.

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

Il post sul blog continua a dire .....

Basta inserire due funzioni per nascondere e visualizzare la finestra di dialogo. Il codice totale è indicato di seguito. Nel seguente codice ho visualizzato una schermata di caricamento con effetto light box. Quando si visualizza la finestra di dialogo modale, è sufficiente richiamare show e nascondere i metodi della schermata di attesa. È utile inviare i lavori espansivi della cpu al thread in background e utilizzare Dispatcher per aggiornare l'interfaccia utente mentre si è in thread in background.

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

Ecco il codebehind

#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

Sto riscontrando problemi con queste righe in particolare:

Process del = new Process(ShowWaitScreenUI);

L'unico processo che riesco a trovare è in System.Diagnostics e non accetta argomenti. È il post sul blog che sto cercando di imparare da fuori, o sono solo nel posto sbagliato?

È stato utile?

Soluzione

Typos qui: Process e ShowWaitScreenHandler devono essere cambiati in ShowWaitScreenUIHandler.

DispatcherPriority ha bisogno di un utilizzo. Fare clic con il tasto destro su DispatcherPriority e selezionare Risolvi.

Altri suggerimenti

Sembra che la persona che ha scritto il blog abbia dimenticato di definire il proprio delegato personalizzato chiamato Process (un po 'di un nome strano per questo).

private delegate void Process();

Dovrebbe compilare ora con esso definito.

Ma invece mi piacciono questi nomi.

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

In realtà puoi fare il refactor per rendere più semplice.

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top