我正在使用Silverlight应用程序中的进度条自定义。我想要达到的是使用进度条标签以下列格式显示其当前状态: “价值/最高”。因此,用户将看到当前值是什么,以及最大可能值是多少。这是我使用的进度条样式:
<Style x:Key="ProgressBarStyle" TargetType="ProgressBar">
<Setter Property="Width" Value="97.21" />
<Setter Property="Height" Value="19" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Canvas x:Name="LevelField" Width="99" Height="21">
...
<TextBlock ... DataContext="{TemplateBinding Value}" Text="{Binding Converter={StaticResource DecNumberToStringConverter}}"/>
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我想要实现这个的方法是使用一个值转换器,它将当前值和最大值转换为正确的字符串。如果它像上面那样写,它确实可以正常工作。但是,我还需要为Convertor提供ConverterParameter,但不知道如何制作它。当我这样写时:,ConvertParameter = {Binding Maximum},它在启动时显示错误,在TextBlock中找不到Text属性。我也试图将DataContext设置为{RelativeSource Self},但是它没有显示找不到DataContext属性的错误。
如何正确制作所描述的进度条标签?
答案 0 :(得分:0)
好吧,好像我找到了一种方法。它不是最好的,但如果您不需要通用解决方案,则有效。因此,我所做的只是创建多个进度条样式,然后在每种类型的进度条中,将其类型指定为转换器的字符串参数。
然后在转换器中(这个对于所有进度条保持不变)我检查参数,并使用常量或直接请求进度条的最大值来指定自己该工具栏的最大数量是多少。
尽管如此,仍然希望听到一个通用的解决方案。
答案 1 :(得分:0)
尝试将TextBox绑定到父级,然后您的值转换器可以访问Value和Maximum。 {Binding RelativeSource={RelativeSource TemplatedParent}}
。
然后您的值转换器可以将对象转换为ProgressBar并直接使用这些值。