通过屏蔽 UI 中的所有其他控件,在 UWP 应用 (c++) 中的现有 MainPage.xaml 顶部显示进度条



我有一个UWP C++应用程序,用于获取一些需要很长时间才能加载的信息。启动时,获取信息和更新 UI.So 需要时间 我想在UI获取数据时放置进度环。我需要在 MainPage.xaml 的加载时间内在 UI 上显示进度环,从而使现有控件不可见。但它并没有出现在UI之上。将数据获取到 UI 后,进度环应消失,所有控件都应可见。

<Page
    x:Class="Ft_Information.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Ft_Information"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"  Loaded="MainWindow_Loaded" BorderThickness="10" IsTabStop="True">
  <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid x:Name="ftnfoGrid" Grid.Row="1">
      <Grid.RowDefinitions>
        <RowDefinition Height="25*" />
        <RowDefinition Height="500*" />
        <RowDefinition Height="100*" />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="50*" />
        <ColumnDefinition Width="500*" />
        <ColumnDefinition Width="800*" />
      </Grid.ColumnDefinitions>
      <StackPanel Orientation="Vertical" Grid.Row="1" Grid.Column="1">
        <TextBox x:Name="ProductNameText"      x:Uid="ProductName"      TextWrapping="Wrap" BorderThickness="0" IsTabStop="False" FontSize="13" IsReadOnly="True" />
       <StackPanel Grid.Row="2" RenderTransformOrigin="0.5,0.5" Grid.ColumnSpan="1" HorizontalAlignment="Stretch" Margin="55,5.333,0.333,-5" VerticalAlignment="Stretch">
        <ProgressRing  Name="ProgressRingLbl" Height="120" Width="109" HorizontalAlignment="Left"
          Foreground="Blue" IsActive="True" Visibility="Visible" VerticalAlignment="Center" Margin="0,0,0,0"/>
      </StackPanel>
    </Grid>
</Grid>
</Page>

MainPage::MainPage()
{
    ProductNameText->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
ProgressRingLbl->IsActive = true;
        ProgressRingLbl->Visibility = Windows::UI::Xaml::Visibility::Visible;
}
MainPage::FuntouploadUI()
{
.............
//after getting data
ProgressRingLbl->IsActive = false;
        ProgressRingLbl->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
ProductNameText->Visibility = Windows::UI::Xaml::Visibility::Visible;
}

进度条仍然没有显示在 UI 中的任何位置。

我在下面写一个简单的演示。可以在应用程序中使用此代码来测试进度环是否可以显示在 UI 中。

<Page ...>   
  <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel Background="AliceBlue">
       <TextBlock x:Name="MyTextBlock" Height="50" FontSize="16" Margin="0,20,0,20">Hello,world</TextBlock>​
       <Button x:Name="MyButton" Click="Button_Click">click me</Button>​
       <ProgressRing x:Name="MyProgressRing" Height="120" Width="109" Foreground="Blue" IsActive="True" Visibility="Visible" HorizontalAlignment="Center" VerticalAlignment="Center"></ProgressRing>​
     </StackPanel>
  </Grid>
</Page>
MainPage::MainPage()
{​
  InitializeComponent();​
  MyTextBlock->Visibility = Windows::UI::Xaml::Visibility::Collapsed;​
  MyButton->Visibility = Windows::UI::Xaml::Visibility::Collapsed;​
  MyProgressRing->IsActive = true;​
  MyProgressRing->Visibility = Windows::UI::Xaml::Visibility::Visible;​
​
}

进度环不起作用的原因是我们使用另一个视图将 mainpage.xaml 显示为其根网格的子项。当我将进度环部分移动到该 xaml 时,它工作正常。由于进度环作为单独的 UI 线程工作,因此主页不会调用它。

最新更新