문제

이 예제를 작동시키려고 합니다. http://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-효과-with-WPF.aspx

그러나 아래 "프로세스"에 대한 네임스페이스나 구문을 제대로 얻을 수 없는 것 같습니다.

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

블로그 게시물은 계속해서 다음과 같이 말합니다.

대화 상자를 숨기고 표시하는 두 가지 기능을 추가하면 됩니다.전체 코드는 다음과 같습니다.아래 코드에서는 라이트 박스 효과가 있는 로딩 화면을 표시했습니다.모달 대화 상자를 표시할 때 대기 화면 표시 및 숨기기 메소드를 호출하면 됩니다.CPU 확장 작업을 백그라운드 스레드로 보내고 디스패처를 사용하여 백그라운드 스레드에 있는 동안 UI를 업데이트하는 것이 좋습니다.

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

여기에 코드 숨김이 있습니다.

#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

특히 다음 줄에 문제가 있습니다.

Process del = new Process(ShowWaitScreenUI);

내가 찾을 수 있는 유일한 프로세스는 System.Diagnostics에 있으며 인수를 사용하지 않습니다.내가 배우려는 블로그 게시물이 잘못된 것인가요, 아니면 제가 잘못된 위치에 있는 것인가요?

도움이 되었습니까?

해결책

여기에 오타가 있습니다:Process 및 ShowWaitScreenHandler를 ShowWaitScreenUIHandler로 변경해야 합니다.

DispatcherPriority에는 사용이 필요합니다.DispatcherPriority를 ​​마우스 오른쪽 버튼으로 클릭하고 해결을 선택합니다.

다른 팁

블로그를 작성한 사람이 자신의 사용자 정의 대의원이 Process (약간 이상한 이름)를 정의하는 것을 잊어 버린 것 같습니다.

private delegate void Process();

정의 된 상태에서 지금 컴파일해야합니다.

그러나 나는 대신 이런 종류의 이름을 좋아합니다.

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

실제로 더 간단하게 만들기 위해 이것을 리팩터링 할 수 있습니다.

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top