0

我试图在窗口打开时显示一个视觉指示“isbusy”,而网格 1-3 正在加载。在使用“telerik:RadToggleButton isbusy”加载网格后,我已经能够显示加载指示,但我想在打开窗口时和加载网格之前显示它。有人可以提前为我指出正确的方向吗?

 <Window.Resources/>

<UserControl Name="tbMain" HorizontalAlignment="Left">        
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="25"></RowDefinition>
        </Grid.RowDefinitions>
        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
            <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch">
                <telerik:RadGridView (1)/>
                <telerik:RadGridView (2)/>
                <telerik:RadGridView (3)/>
            </StackPanel>
        </ScrollViewer

        <DockPanel Grid.Row="1" Background="SkyBlue">
            <Button x:Name="btnAcceptMerge" Content="Accept Merge" DockPanel.Dock="Left"/>
            <Button x:Name="btnCancel"  Content="Cancel Merge" Click="btnCancel_Click" DockPanel.Dock="Right"/>
            <TextBlock Text=""/>
        </DockPanel>
    </Grid>
 </UserControl>
 </Window>
4

2 回答 2

2

您可以使用 Xceed 工具包的忙控制。要使用它,您必须使用 backgroundworker。

以下是完整的解决方案。

XAML:

首先你必须添加 Xceed 工具包的命名空间引用。

xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"

之后,您必须使用 BusyIndi​​cator 围绕您的网格,您也可以实现进度。

    <xctk:BusyIndicator.BusyContentTemplate>
        <DataTemplate>
            <StackPanel Margin="0" Background="#FFD1DEF0" >

                <TextBlock  Text="Generating......" />

                <StackPanel Margin="4">
                     <ProgressBar Value="{Binding Path=DataContext.ProgressValue, RelativeSource={RelativeSource Mode=FindAncestor, 
        AncestorType=Window}}" Height="15"/>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </xctk:BusyIndicator.BusyContentTemplate>
    <xctk:BusyIndicator.OverlayStyle>
        <Style TargetType="Rectangle">
            <Setter Property="Fill" Value="Transparent" />

        </Style>
    </xctk:BusyIndicator.OverlayStyle>
    <xctk:BusyIndicator.ProgressBarStyle>
        <Style TargetType="ProgressBar">
            <Setter Property="IsIndeterminate" Value="False"/>
            <Setter Property="Visibility" Value="Collapsed"/>
            <Setter Property="Maximum" Value="100"/>
        </Style>
    </xctk:BusyIndicator.ProgressBarStyle>

         <telerik:RadGridView (1)/>
            <telerik:RadGridView (2)/>
            <telerik:RadGridView (3)/>
 </xctk:BusyIndicator>

在视图模型中:

在 VM 构造函数中,您应该将 IsVMBusy 属性设置为 true。

        var worker = new BackgroundWorker();
        worker.DoWork += (o, ea) =>
          {
    ///your task
     };
        worker.RunWorkerCompleted += (o, ea) =>
        {
            IsVMBusy = false;
          };
         worker.RunWorkerAsync();
于 2013-11-13T05:21:14.667 回答
0

您可以使用 Telerik 的 BusyIndi​​cator 控件围绕您的网格,并将其绑定到IsBusyVM 上的属性。

          <telerik:BusyIndicator IsBusy="{Binding IsBusy}">
            <StackPanel>
               <telerik:RadGridView (1)/>
               <telerik:RadGridView (2)/>
               <telerik:RadGridView (3)/> 
            </StackPanel>
          </telerik:BusyIndicator/>

假设您使用 VM first 技术,其中 VM 在视图之前创建(即将其注入视图的构造函数),您可以在 VM 的构造函数中设置IsBusyTrue,并在网格加载或完成加载时将其设置回 false。还要确保IsBusy加注PropertyChanged

于 2013-11-12T22:57:20.653 回答