2015-03-06 3 views
3

Я переношу свое приложение Windows Phone 8 в Windows Universal Apps. В этом я использовал индикатор прогресса, чтобы показать какой-то текст, например «Loading Please Wait ..», пока я не получу сервер формы ответа для вызова веб-службы. Теперь я хочу достичь той же цели и в приложении Windows 8.1. В Windows 8.1 есть элемент управления Progress Ring, но в этом атрибуте Text там нет. Может ли кто-нибудь предложить с некоторым примером кода, как этого добиться. И я хочу использовать это во всем моем приложении?Как показать кольцо прогресса с текстом в Windows Universal Apps?

Даже текст, который я использовал для показа в индикаторе прогресса, хранится в json-файле в локальном хранилище.

Кроме того, я хочу достичь этого, используя Dispatcher и в C#, не используя Xaml.

ответ

2

Вы можете создать свой собственный UserControl, который будет содержать как ProgressRing и TextBlock для сообщения, вот пример:

<UserControl 
x:Class="YourNamespace.ProgressRingWithText" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:YourNamespace" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
d:DesignHeight="300" 
d:DesignWidth="400" 
x:Name="uc"> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <ProgressRing IsActive="{Binding IsActive, ElementName=uc}"/> 
    <TextBlock Text="{Binding Text, ElementName=uc}" HorizontalAlignment="Center"/> 
</Grid> 

И C#:

public sealed partial class ProgressRingWithText : UserControl 
{ 
    public bool IsActive 
    { 
     get { return (bool)GetValue(IsActiveProperty); } 
     set { SetValue(IsActiveProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for IsActive. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty IsActiveProperty = 
     DependencyProperty.Register("IsActive", typeof(bool), typeof(ProgressRingWithText), new PropertyMetadata(false)); 

    public string Text 
    { 
     get { return (string)GetValue(TextProperty); } 
     set { SetValue(TextProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty TextProperty = 
     DependencyProperty.Register("Text", typeof(string), typeof(ProgressRingWithText), new PropertyMetadata("Loading...")); 

    public ProgressRingWithText() 
    { 
     this.InitializeComponent(); 
    } 
} 

Затем вы можете ссылаться на эти свойства при добавлении их в окно/страницу.

Вы даже можете сделать еще один шаг и использовать логическое преобразование видимости для преобразования свойства IsActive в видимость, чтобы изменить видимость TextBlock.

Конечно, это очень простой интерфейс, но поиграйте с ним и посмотрите, работает ли это для вас.

Смежные вопросы