Pergunta

Tentando fazer este exemplo funcionando de http://www.munna.shatkotha.com/blog/post/2008/10/26/light-box-effect-with-wpf.aspx

No entanto, não consigo obter o espaço para nome ou sintaxe para o "processo" abaixo.

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

A postagem do blog continua dizendo .....

Basta colocar duas funções para ocultar e exibir a caixa de diálogo. O código total é dado abaixo. No código abaixo, exibi uma tela de carregamento com efeito de caixa de luz. Ao exibir a caixa de diálogo modal, basta invocar os métodos de tela de espera e ocultar. É bom enviar seus trabalhos expansivos da CPU para o thread de segundo plano e usar o Dispatcher para atualizar a interface do usuário enquanto estiver no encadeamento de segundo plano.

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

Aqui está o 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

Estou tendo problemas com essas linhas especificamente:

Process del = new Process(ShowWaitScreenUI);

O único processo que posso encontrar é no System.Diagnostics e não leva argumentos. A postagem do blog está tentando aprender, ou estou apenas no lugar errado?

Foi útil?

Solução

Erros de digitação aqui: Process e ShowwaitScreenHandler precisam ser alterados para ShowwaitScreenuiHandler.

O DispatcherPriority precisa de um uso. Clique com o botão direito do mouse no DispatcherPriority e selecione Resolver.

Outras dicas

Parece que a pessoa que escreveu o blog esqueceu de definir seu delegado personalizado chamado Process (um pouco de nome estranho para ele).

private delegate void Process();

Deve ser compilado agora com ele definido.

Mas eu gosto desse tipo de nomes.

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

Na verdade, você pode refatorar isso para tornar mais simples.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top