toolkit:BusyIndicator 是一个加载动画的容器控件,当这个控件被激活时,容器内容会被锁定,就类似弹出一个层,底部门内容均不可操作,容器中间有一个加载动画,
这个动画可以自己的定义,也可以可以是模板。下面看一个例子
1:新建一个用户控件,前台代码如下:
<Grid x:Name="LayoutRoot" Background="White"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition /> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal" Grid.Row="0"> <Button x:Name="btnstart" Content="启动" Width="75" Height="30" Click="btnstart_Click" /> <Button x:Name="btnstop" Content="停止" Width="75" Height="30" Click="btnstop_Click" /> </StackPanel> <toolkit:BusyIndicator x:Name="Indicator" Grid.Row="1"> <sdk:DataGrid x:Name="dglist" /> </toolkit:BusyIndicator> </Grid>
补充一下BusyIndicator 是toolkit的一个控件,所以要先添加toolkit的命名空间,一般在右边工具栏托到界面,系统就自动回吧引用代码写到头部。
上面的界面很简单,一个启动按钮,一个停止按钮,然后是一个BusyIndicator容器,容器中间放了一个表格控件,注意,只有在容器里面的内容在加载状态时才会受影响,容器外面的不管。
所以,一般要把内容都写到这个容器里面。
下面看后台代码
private void btnstart_Click(object sender, RoutedEventArgs e) { Indicator.IsBusy = true; DeskCollection desks = new DeskCollection(); for (int i = 0; i < 21; i++) { int state = 0; if (i > 6) state = 1; if (i > 10) state = 2; if (i > 15) state = 3; Desk d = new Desk() { Id = i.ToString("000"), Name = "A" + i.ToString("00"), State = state, Count = 5, Grt = 555522.52F, Booker = "叶先生和刘先生", BookCount = 3 }; desks.Add(d); } dglist.ItemsSource = desks; } private void btnstop_Click(object sender, RoutedEventArgs e) { Indicator.IsBusy = false; }
重点:Indicator.IsBusy = true; Indicator.IsBusy = false; 当为true时,就会激活加载状态,为false时就停止。
效果图如下:
补充一点:如果是动态加载用户控件的设计界面,需要获取父控件的元素代码如下
BusyIndicator busyIndicator = ((FrameworkElement)App.Current.RootVisual).FindName("Indicator") as BusyIndicator;
其中"Indicator"就是控件名称
busyIndicator.IsBusy=true;