尝试从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>
博客帖子继续说.....
只需输入两个隐藏功能并显示对话框。总代码如下。在下面的代码中我显示了一个带灯箱效果的加载屏幕。当显示模态对话框时,只需调用show和hide等待屏幕方法。将你的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中,并且不带任何参数。这篇博文是我试图从中学习,还是我只是在错误的地方?
答案 0 :(得分: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;
}
答案 1 :(得分:1)
错别字:需要将Process和ShowWaitScreenHandler更改为ShowWaitScreenUIHandler。
DispatcherPriority需要使用。右键单击DispatcherPriority并选择Resolve。