1

在我的 WPF 应用程序中,当用户单击按钮时会激活某些耗时的操作。我想做的是,向用户显示一个模态框,如等待光标,就像它完成的一个 Web 应用程序一样,以指示该过程正在后台进行。我需要什么样的控件来实现这一目标?

4

2 回答 2

1

查看忙碌指示灯

于 2011-08-19T13:40:59.557 回答
1

你在这里看的不多。我不确定您是如何设计您的应用程序的,但对于我自己,我创建了一个NavPage扩展UserControl该类并具有Modal类型NavPageClose事件属性的类。

所以基本上我的NavPage控件允许我在NavPag其中托管其他控件作为模式。Close 函数只是关闭页面。

这是我的模板如何查找NavPage控件。

<ControlTemplate x:Key="Fx_NavPage_ControlTemplate" TargetType="{x:Type fx:NavPage}">
    <Grid>
        <Border x:Name="TheContainer" CornerRadius="{TemplateBinding CornerRadius}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}">
            <ContentControl Content="{TemplateBinding Content}" />
        </Border>
        <Border x:Name="TheCover" CornerRadius="{TemplateBinding CornerRadius}" Background="#20000000" Visibility="Collapsed" />
        <ContentControl x:Name="TheModal" Content="{TemplateBinding Modal}" Visibility="Collapsed" />
    </Grid>
    <ControlTemplate.Triggers>
        <DataTrigger Binding="{Binding Modal, RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource IsNullConverter}}" Value="False">
            <Setter TargetName="TheCover" Property="Visibility" Value="Visible" />
            <Setter TargetName="TheModal" Property="Visibility" Value="Visible" />
        </DataTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

所以基本上我只有一个Grid,一个ContentControl (TheContainer)Border (TheCover)另一个ContentControl (TheModal)。然后我有一个DataTrigger检查Modal属性的值是否在 上NavPage,如果它不是空值,它会将 TheCover 和 TheModal 的可见性更改为可见。封面只是一个半透明的边框控件,它阻止用户单击主导航页中的控件。

希望这对您有所帮助,或者您可以简单地使用上面建议的 BusyIndi​​cator,我自己从未使用过它,因此无法在那里给您任何输入。如果您决定采用这种方式并需要帮助,现在让我为您获取更多代码。

于 2011-08-19T13:55:11.323 回答