Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何计算XAML中的百分比值_Wpf - Fatal编程技术网

Wpf 如何计算XAML中的百分比值

Wpf 如何计算XAML中的百分比值,wpf,Wpf,我有一个圆圈进度条和这个圆圈内的简单标签 <DesignInControl:CircularProgressBar x:Name="CircularProgressBar" HorizontalAlignment="Center" VerticalAlignment="Center" Percentage="0" /> <Label Name="lblProgress" Content="0%" Foreground="White" Grid.Column="1

我有一个圆圈
进度条
和这个圆圈内的简单标签

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

<Label Name="lblProgress" Content="0%" Foreground="White"  Grid.Column="1" />
My
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" />
公共类DoubleToPercentageConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
返回string.Format(“{0%}”,(int)(((double)Data.numberOfFiles/TotalFilesInList.Value)*100));
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
返回0;
}
}
这将计算我的百分比,但当我尝试运行我的应用程序时,我的
标签中出现异常:

PresentationFramework.dll中首次出现类型为“System.Windows.Markup.XamlParseException”的异常

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


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

您可以使用转换器。要创建转换器,请执行以下操作:

  • 创建一个名为“converter”的文件夹,并在其中添加一个新类,即:
    doubletPercentageConverter.cs
  • 此类必须实现接口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();
      }
    }
    
  • Convert
    方法中添加逻辑并返回值。。例如:

    返回值.ToString()+“%”

  • 在xaml内部,将此添加到您的资源中

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

  • 将转换器绑定到元件:

  • Timer\u Tick
    事件中,将进度条的
    Percentage
    值设置为计算值:

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

  • 让我知道它是否有效

    在第2节的类示例中,我需要这2个方法?或者只实现我自己的方法,就像你写的那样。当你让你的类实现
    IValueConverter
    时,你将不得不添加这两个方法。这是因为
    IValueConverter
    是一个
    接口
    ,您必须实现该接口内的所有方法!为了简化过程,在键入“:IValueConverter”后,将鼠标悬停在上面,visual studio将建议您实现缺少的方法!;)您可以将
    ConverBack
    保留为空。好的,我实现了这个类,并在添加到windows之后。资源我有编译错误:错误4找不到类型“converter:DoubleToPercentageConverter”。验证您没有缺少程序集引用,并且所有被引用的程序集都已内置。我的XAML:xmlns:my=“clr命名空间:MyApp.classes”中有此项,但文件夹转换器不在文件夹类中,我是否应将其放入其中?添加
    xmlns:converter=“clr命名空间:MyApp.converter”
    如果转换器文件夹位于根文件夹中
    CircularProgressBar.Percentage = (int)(((double)Data.numberOfFiles/ TotalFilesInList.Value) * 100))