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" />
MyDoubleToPercentageConverter
类别:
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))