gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:17:45 33 4
gpt4 key购买 nike

嘿,
我有一个基于 Prism4 的 WPF 应用程序。执行慢速操作时,我想显示一个繁忙的屏幕。我将有大量的屏幕,所以我试图在框架中构建一个单一的解决方案,而不是在每个屏幕上添加繁忙的指示器。

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

为了进行设置,我认为我可以将我的应用程序屏幕与 spinny 的东西(具有更大的 ZIndex)一起放在 Canvas 中,然后根据需要使 spinny 的东西可见。

然而,这越来越难了。 Canvas 似乎没有很好地为此设置,我想我可能是在吠叫错误的树。

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

最佳答案

我已经用几个程序做到了这一点。简而言之:

(这对于 MVVM 来说是最简单的。自从我将代码隐藏用于这样的事情已经很久了,我真的不能说是否有一个好的方法来做到这一点。)

  • 在主窗口上创建一个边框。我通常将其设置为黑色,透明度为 50%。给它添加一个网格,然后在里面放任何你想要的东西来告诉用户它很忙。调整边框和其中的控件以填充屏幕。
  • 在您的主 ViewModel 上为 IsBusy 创建一个属性作为 bool 值。将其初始化为 False。将忙碌边框的 Visibility 属性绑定(bind)到该属性。
  • 接下来,为 Busy(Boolean) 到 Visibility 创建一个转换器类。将逻辑写入其中,以便当值为 True 时,可见性为可见,当值为 false 时,可见性被折叠。 (http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx)。
  • 回到边界,将转换器添加到绑定(bind)中。为您的每个页面或 View 添加代码到 ViewModel,这些代码回调该属性并在您的其他线程忙时将其设置为 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>

    关于wpf - 如何在 wpf 屏幕上显示忙碌消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4505644/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com