2008-12-05 9 views
0

Попытка получить этот пример от http://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-effect-with-WPF.aspxВопрос пространства имен WPF - Процесс?

Однако, похоже, я не могу получить пространство имен или синтаксис для «Процесс» ниже.

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

Сообщение в блоге продолжает говорить .....

Просто поместите две функции для сокрытия и отображения диалогового окна. Полный код приведен ниже. В приведенном ниже коде я отобразил экран загрузки с эффектом световой коробки. При отображении модального диалога просто вызывайте шоу и скрывайте методы экрана ожидания. Приятно отправить свои расширенные рабочие места в фоновый поток и использовать диспетчер для обновления интерфейса, когда вы находитесь в фоновом потоке.

<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, и занимает не аргументы. Является ли сообщение в блоге, которое я пытаюсь изучить, или я просто не в том месте?

ответ

1

Опечатки здесь: процесс и потребности ShowWaitScreenHandler быть изменен на ShowWaitScreenUIHandler.

DispatcherPriority необходимо использовать. Щелкните правой кнопкой мыши DispatcherPriority и выберите «Разрешить».

2

Похоже, что человек, который написал блог, забыл определить свой пользовательский делегат под названием 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; 
}