我在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个静态字段:
main form class
- totalFiles 作为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
中有例外:
PresentationFramework.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常
其他信息:'设置属性 'System.Windows.Controls.ContentControl.Content'引发了异常。 行号'481'和行位置'45'。
这是因为当应用程序启动时,值TotalPacketInList.Value
为零,我的计算除以零。
答案 0 :(得分:0)
您可以使用转换器。为了创建转换器:
DoubleToPercentageConverter.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
方法中添加逻辑并返回一个值..例如:
return value.ToString() + "%";
在xaml内部添加此资源
<converter:DoubleToPercentageConverter x:Key="DoubleToPercentage"/>
其中converter是您在其中创建转换器的文件夹
将转换器绑定到元素:
<Label Name="lblProgress" Content="{Binding ElementName=CircularProgressBar,Path=Percentage, Converter={StaticResource DoubleToPercentage}}" Foreground="White" Grid.Column="1" />
在Timer_Tick
事件中,将进度条的Percentage
值设置为您的计算值:
CircularProgressBar.Percentage = (int)(((double)Data.numberOfFiles/ TotalFilesInList.Value) * 100))
让我知道它是否有效!