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

dav*_*ave 6 wpf xaml

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

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

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

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

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

Cod*_*ior 14

我用几个程序完成了这个.简而言之:

(对于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.

科里

编辑:

<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>
Run Code Online (Sandbox Code Playgroud)