如何编写WPF中的“加载”或“等待”图形?
如果某人有一个页面需要加载大量信息,通常是在Flash网站上,你会看到某种循环旋转,这通常意味着有很多数据被加载而用户需要等待
这不仅仅是一个很好的效果。它具有现实世界的应用和重要性。如果有人打开没有此图形的表单或页面或窗口,而是看到一个应该显示信息的表单,而是看到空白字段,那么他的第一个想法可能就是没有信息可见。即使光标变为等待模式,这也可能是真的。与可能处于某种旋转状态的光标相比,广阔的空虚领域将更多地存在并压倒一个图像。
我想我可以把东西放在一起。我想我可以呈现一个旋转圆圈的gif,它在开头显示,然后在调用所有数据加载方法后隐藏。但也许有一些共享的共同图形可供免费使用,而且不知道究竟是什么叫这个东西,我不知道用什么名称或短语来搜索它。他们叫什么?
此外,也许已经有一些东西已经构建到WPF甚至MVVM中使用它。在那儿?此外,也许有人已经找到了一种方法,使整个表单或页面灰色和不活动,同时显示一个旋转的圆圈,并且已经足够友好地分享它。这是真的吗?
答案 0 :(得分:3)
在我看来,你在这里问了一堆不同的问题。所以,虽然我通常不喜欢零碎的回复,但这里是:
但也许有某种共享 常见的图形免费使用 不知道究竟是什么 事情被称为,我不知道是什么 用于搜索的名称或短语 一。他们叫什么?
我确信您可以在网络上使用免版税图像。我可能会搜索“忙碌的光标”甚至是“沙漏”,因为直到最近,主要的操作系统才会渲染它们。
此外,也许已经有了一些东西 构建到WPF或WCF甚至MVVM 使用这个。有吗?
首先,我们最好明白条款:
另外,也许有人找到了 制作整个表格或页面的方法 显示时显示灰色且不活动 旋转的圆圈,一直很亲切 足以分享它。这是真的吗?
几乎可以肯定。同样,您可以采取多种方法。例如,this question中提到了其中一些。搜索“叠加”或“闪屏”可能会指向正确的方向。简而言之(在WPF中):
Inactive
属性和/或捕获Preview(Key|Mouse)Down
个事件Grid
或Rectangle
来“灰显”该页面。根据你这样做的方式,它可能会处理使底层控件“处于非活动状态”(不要引用我这个,但我相信像Rectangle这样的元素会截取鼠标点击,所以用户无法点击在它下面控制......)答案 1 :(得分:1)
使用后台工作程序,对于wpf中的循环进度条,请参阅http://www.codeproject.com/Articles/49853/Better-WPF-Circular-Progress-Bar.aspx以获取非常好的内容。
答案 2 :(得分:0)
BackGroundWorker主题是你的朋友。 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
答案 3 :(得分:0)
我不确定,只是一个想法。显示一个透明的模态窗口,其中包含旋转圆,直到后台线程加载数据。加载数据时。关闭模态窗口。
答案 4 :(得分:0)
您可以简单地使用附加属性
这是一篇包含完整示例代码的帖子(只是几个类) http://www.deanchalk.me.uk/post/WPF-e28093-Loading-Spinner-Via-MVVM-and-Attached-Properties.aspx
您的主要WPF Windows看起来像这样:
<Window.Resources>
<CollectionViewSource x:Key="DataList" Source="{Binding TestData}" />
</Window.Resources>
<Grid Background="AliceBlue" app:AsyncNotifier.Trigger="{Binding IsDataLoading}"
app:AsyncNotifier.SpinnerText="Loading...">
<TabControl Grid.RowSpan="2">
<TabItem Header="TabItem">
<Grid Background="#FFE5E5E5">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox ItemsSource="{Binding
Source={StaticResource DataList}}" />
<Button Content="Do Update" HorizontalAlignment="Left" Command="{Binding LoadData}"
VerticalAlignment="Top" Width="75" Grid.Row="1" Margin="0,5" />
</Grid>
</TabItem>
<TabItem Header="TabItem">
<Grid Background="#FFE5E5E5"/>
</TabItem>
</TabControl>
</Grid>