0

试图让这个例子从http://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-effect-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 中,并且不带任何参数。是我想从中学习的博客文章,还是我只是在错误的地方?

4

2 回答 2

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;
}
于 2008-12-05T17:35:14.380 回答
1

此处输入错误:Process 和 ShowWaitScreenHandler 需要更改为 ShowWaitScreenUIHandler。

DispatcherPriority 需要使用。右键单击 DispatcherPriority 并选择 Resolve。

于 2008-12-05T17:53:55.170 回答