2015-06-15 4 views
0

У меня есть круг Progress-Bar и простой ярлык внутри этого CircleКак рассчитать процентное значение в XAML

<DesignInControl:CircularProgressBar x:Name="CircularProgressBar" HorizontalAlignment="Center" VerticalAlignment="Center" 
    Percentage="0" /> 

<Label Name="lblProgress" Content="0%" Foreground="White" Grid.Column="1" /> 

У меня есть 2 статическое поле:

  1. В моих main form class - totalFiles
  2. Как class member:

    общественный класс Данные { public static int numberOfFiles; }

Так что в этом Circle и мой label я хочу показать свой процент на стоимость: (Data.numberOfFiles\totalFiles) * 100

Так как я могу сделать это с помощью XAML?

Редактировать

Добавить новый класс, держать свою форму переменной:

public class TotalPacketInList 
{ 
    private static int _value; 

    public static int Value 
    { 
     get { return _value; } 
     set { _value = value; } 
    } 
} 

Мой DoubleToPercentageConverter класс:

public class DoubleToPercentageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return string.Format("{0%}", (int)(((double)Data.numberOfFiles/ TotalFilesInList.Value) * 100)); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return 0; 
    } 
} 

<Label Name="lblCircleProgress" Content="{Binding ElementName=CircularProgressBar,Path=Percentage, Converter={StaticResource DoubleToPercentage}}" 
     Grid.Column="1" /> 

это будет рассчитать свой процент, но когда я пытаюсь запустить мой приложение у меня есть исключение в моем label:

Первый шанс, исключение типа «System.Windows.Markup.XamlParseException» произошло в PresentationFramework.dll

Additional information: 'Set property 'System.Windows.Controls.ContentControl.Content' threw an exception.' Line number '481' and line position '45'.

Это потому, что, когда приложение запуска значение TotalPacketInList.Value равно нулю, а мой расчет делится на ноль.

ответ

0

Вы можете использовать Преобразователи. Для того, чтобы создать преобразователь:

  1. Создать папку с именем «конвертер» и добавить новый класс в нем то есть: DoubleToPercentageConverter.cs
  2. этот класс должен реализовывать интерфейс IValueConverter.

    public class DoubleToPercentageConverter: IValueConverter 
    { 
        public object Convert(object value, Type targetType, object parameter, string language) 
        { 
        //Don't know if the Double cast is neccessary 
        return string.Format("{0%}", ((Double)value).ToString())); 
        } 
    
        public object ConvertBack(object value, Type targetType, object parameter, string language) 
        { 
        throw new NotImplementedException(); 
        } 
    } 
    
  3. добавить логику внутри метода Convert и возвращает значение ..например:

    return value.ToString() + "%";

  4. Внутри XAML добавить это в вас ресурсы

    <converter:DoubleToPercentageConverter x:Key="DoubleToPercentage"/>

    где конвертер это папка, в которой вы создали конвертер

  5. Bind преобразователь к элемент:

    <Label Name="lblProgress" Content="{Binding ElementName=CircularProgressBar,Path=Percentage, Converter={StaticResource DoubleToPercentage}}" Foreground="White" Grid.Column="1" />

  6. В вашем Timer_Tick случае установить значение индикатора выполнения Percentage к вашему calculeted значение:

    CircularProgressBar.Percentage = (int)(((double)Data.numberOfFiles/ TotalFilesInList.Value) * 100)) 
    

Позвольте мне знать, если это работает!

+0

Мне нужны эти 2 метода в примере класса в разделе 2? или только реализовать свой собственный метод, как вы написали. –

+0

Когда вы выполняете реализацию класса 'IValueConverter', вы будете обязаны добавить эти два метода. Это потому, что 'IValueConverter' является« интерфейсом », и вы должны реализовать все методы внутри этого интерфейса! Чтобы упростить процесс, после ввода ': IValueConverter' наведите указатель мыши на него, а визуальная студия предложит вам реализовать недостающие методы! ;) Вы можете оставить 'ConverBack' пустым. –

+0

ОК я реализовал этот класс и после добавления в windows.resources У меня ошибка компиляции: Ошибка \t Тип «конвертер: DoubleToPercentageConverter» не найден. Убедитесь, что у вас нет ссылки на сборку и что все ссылочные сборки были созданы –

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