如何计算XAML中的百分比值

时间:2015-06-15 10:20:54

标签: wpf

我在Progress-Bar

中包含了圈Circle和简单标签
<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; }

  3. 所以在这个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中有例外:

    PresentationFramework.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常

      

    其他信息:'设置属性   'System.Windows.Controls.ContentControl.Content'引发了异常。   行号'481'和行位置'45'。

    这是因为当应用程序启动时,值TotalPacketInList.Value为零,我的计算除以零。

1 个答案:

答案 0 :(得分:0)

您可以使用转换器。为了创建转换器:

  1. 创建一个名为“converter”的文件夹,并在其中添加一个新类,即: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"/>

    其中converter是您在其中创建转换器的文件夹

  5. 将转换器绑定到元素:

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

  6. Timer_Tick事件中,将进度条的Percentage值设置为您的计算值:

    CircularProgressBar.Percentage = (int)(((double)Data.numberOfFiles/ TotalFilesInList.Value) * 100))
    
  7. 让我知道它是否有效!