Pregunta

Intentando que este ejemplo funcione desde http://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-effect-with-WPF.aspx

Sin embargo, parece que no puedo obtener el espacio de nombres o la sintaxis correcta para " Proceso " a continuación.

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

La publicación del blog continúa diciendo .....

Simplemente ponga dos funciones para ocultar y mostrar el diálogo. El código total se proporciona a continuación. En el siguiente código, he mostrado una pantalla de carga con efecto de caja de luz. Al mostrar el diálogo modal, simplemente invoque mostrar y ocultar los métodos de la pantalla de espera. Es bueno enviar sus trabajos expansivos de la CPU al hilo de fondo y usar el despachador para actualizar la interfaz de usuario mientras está en el hilo de fondo.

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

Aquí está el código detrás

#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

Tengo problemas con estas líneas específicamente:

Process del = new Process(ShowWaitScreenUI);

El único proceso que puedo encontrar está en System.Diagnostics, y no toma argumentos. ¿La publicación de blog de la que estoy tratando de aprender está apagada o simplemente estoy en el lugar equivocado?

¿Fue útil?

Solución

Errores tipográficos aquí: Process y ShowWaitScreenHandler deben cambiarse a ShowWaitScreenUIHandler.

DispatcherPriority necesita un uso. Haga clic derecho en DispatcherPriority y seleccione Resolver.

Otros consejos

Parece que la persona que escribió el blog olvidó definir su delegado personalizado llamado Proceso (un nombre un poco extraño para él).

private delegate void Process();

Debería compilarse ahora con él definido.

Pero en su lugar me gustan este tipo de nombres.

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

En realidad, puede refactorizar esto para simplificarlo.

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top