如何在wpf屏幕上显示忙碌信息

时间:2010-12-22 02:20:42

标签: wpf xaml

嘿 我有一个基于Prism4的WPF应用程序。执行慢速操作时,我想显示一个忙碌的屏幕。我将拥有大量的屏幕,因此我尝试在框架中构建一个解决方案,而不是将忙碌指示符添加到每个屏幕。

这些长时间运行的操作在后台线程中运行。这允许UI更新(好)但不会阻止用户使用UI(坏)。我想要做的是用一个旋转拨号的东西覆盖一个控件,并让控件覆盖整个屏幕(旧的HTML技巧与DIV)。当应用程序繁忙时,控件将显示,从而阻止任何进一步的交互以及显示spinny事物。

为了设置它,我想我可以将我的应用程序屏幕放在画布上以及spinny事物(使用更大的ZIndex)然后根据需要使spinny事物可见。

然而,这变得越来越难了。画布似乎没有很好的设置,我想我可能会咆哮错误的树。

我将不胜感激任何帮助。感谢。

2 个答案:

答案 0 :(得分:13)

我用一些程序完成了这个。简而言之:

(对于MVVM来说这是最简单的。自从我将codebehid用于这样的事情已经很久了,我真的不能说是否有一个很好的方法来实现它。)

  1. 在主窗口上创建边框。我通常把它变成黑色,透明度为50%。添加一个网格,并在内部放置任何内容,告诉用户它正忙。调整边框及其内部控件的大小以填充屏幕。
  2. 在主ViewModel上为IsBusy创建一个属性为boolean。将其初始化为False。将Busy Border的Visibility属性绑定到该属性。
  3. 接下来,将Busy(布尔)的转换器类设置为Visibility。将逻辑写入其中,以便当值为True时,可见性为Visible,当value为false时,可见性将折叠。 (http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx)。
  4. 返回边框,将转换器添加到绑定中。为ViewModel添加代码,用于回调该属性的每个Pages或Views,并在其他线程忙时将其设置为true。
  5. 科里

    编辑:

    <Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MainWindow"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="480">
    
    <Grid>
    
        <Border BorderBrush="Black" BorderThickness="1" Background="#80000000" Visibility="Collapsed">
            <Grid>
                <TextBlock Margin="0" TextWrapping="Wrap" Text="Busy...Please Wait" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="26.667" FontWeight="Bold" Foreground="#7EFFFFFF"/>
            </Grid>
        </Border>
    
        <DockPanel x:Name="LayoutRoot">
            <CheckBox Content="CheckBox" VerticalAlignment="Top"/>
            <TextBlock TextWrapping="Wrap"><Run Text="TextBlock"/></TextBlock>
            <UserControl x:Name="ViewViewView"/>
        </DockPanel>
    </Grid>
    

答案 1 :(得分:3)

使用繁忙指示器查看此WPF工具包:https://github.com/xceedsoftware/wpftoolkit/wiki/BusyIndicator