Как я могу показать элемент управления ProgressRing ТОЛЬКО поверх / поверх моей текущей страницы? - PullRequest
0 голосов
/ 18 марта 2019

Я разработчик Android, пытаюсь освоить разработку UWP и застрял на этой простой необходимости. У меня есть 3 страницы, и я хочу сделать ProgressRing доступным для всех 3 страниц, поэтому, когда я выполняю асинхронную задачу, я могу вызвать модал ProgressRing. Я не хочу иметь код ProgressRing на каждой странице. Как мне это сделать?

Я посмотрел на класс ContentDialog, но для этого требуется кнопка в пользовательском интерфейсе, и все, что я хочу показать, - это сам ProgressRing без кнопки, центрированной в моем окне

Похоже, что класс Flyout должен быть частью самой страницы, поэтому я не могу разделить его между несколькими страницами.

Класс Popup выглядит многообещающе, но он не модальный, и я не могу понять его документацию.

Может кто-нибудь порекомендовать мне класс или подход? Как я могу просто наложить элемент управления поверх моей существующей страницы, в центре страницы, без другого пользовательского интерфейса, кроме единственного элемента управления, в моем случае ProgressRing?

Ответы [ 3 ]

1 голос
/ 26 марта 2019

Как показать элемент управления ProgressRing ТОЛЬКО поверх / поверх моей текущей страницы?

По вашему требованию, похоже, вы хотите сделать HUD для uwp.И вы можете использовать Popup класс, чтобы приблизиться.Popup - это контейнер общего назначения для размещения UIElement поверх существующего контента.Таким образом, вы можете создать UserControl это с ProgressRing и сделать Popup в качестве контейнера хоста.

Код позади

public sealed partial class UWPHUDControl : UserControl
{
    Popup popup;
    public UWPHUDControl()
    {
        this.InitializeComponent();                  
    }

    public  UWPHUDControl(string message)
    {
        this.InitializeComponent();
        SystemNavigationManager.GetForCurrentView().BackRequested += UWPHUD_BackRequested;
        Window.Current.CoreWindow.SizeChanged += CoreWindow_SizeChanged;
        msg_Txt.Text = message;
    }

    private void CoreWindow_SizeChanged(CoreWindow sender, WindowSizeChangedEventArgs args)
    {
        UpdateUI();
    }

    private void UWPHUD_BackRequested(object sender, BackRequestedEventArgs e)
    {
        Close();

    }
    private void UpdateUI()
    {

        var bounds = Window.Current.Bounds;
        this.Width = bounds.Width;
        this.Height = bounds.Height;
    }

    public void Show()
    {       
        popup = new Popup();
        popup.Child = this;   
        progress_R.IsActive = true;       
        popup.IsOpen = true;
        UpdateUI();
    }



    public void Close()
    {
        if (popup.IsOpen)
        {
            progress_R.IsActive = false;
            popup.IsOpen = false;
            SystemNavigationManager.GetForCurrentView().BackRequested -= UWPHUD_BackRequested;
            Window.Current.CoreWindow.SizeChanged -= CoreWindow_SizeChanged;
        }
    }
}

Xaml

<Grid Name="mask_grid" Background="{ThemeResource SystemControlAccentAcrylicWindowAccentMediumHighBrush}" Opacity="0.35">
    <StackPanel
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        Orientation="Horizontal"
        >
        <ProgressRing
            Name="progress_R"
            Width="50"
            Height="50"
            />
        <TextBlock
            Name="msg_Txt"
            Margin="10,0,0,0"
            VerticalAlignment="Center"
            FontSize="12"
            Foreground="Azure"
            TextAlignment="Center"
            />
    </StackPanel>

</Grid>

Использование

UWPHUDControl hud = new UWPHUDControl("Loading");
hud.Show();
await Task.Delay(2000);
hud.Close();
0 голосов
/ 27 марта 2019

вы можете использовать UserControl и поместить этот пользовательский элемент управления в верхнюю часть вашего пользовательского интерфейса, делая его видимым или свернутым в зависимости от вашей логики.

Если вы ищете хороший элемент управления для этого, вы можете рассмотреть возможность загрузки.Xaml Control из Community Toolkit https://docs.microsoft.com/en-us/windows/communitytoolkit/controls/loading

0 голосов
/ 19 марта 2019

Возможные шаги:

  1. Щелкните правой кнопкой мыши проект.
  2. Добавить> Новый элемент> Пользовательский элемент управления
  3. Внутри вашего CustomUserControl xaml вы можете добавить свой элемент управления ProgressRing, который необходимо настроить только один раз.Чтобы использовать этот CustomUserControl на любой из ваших страниц.

Это довольно простой способ сделать это.

...