2010-05-31 45 views
1

我在玩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> 

我想实现这一点的方法,是有一个价值转换,将转换成电流值和最大可能为正确的琴弦。如果它的写法如上所述,它确实工作正常。不过,我也需要为转换器提供ConverterParameter,但不知道如何制作它。当我这样写时:ConvertParameter = {绑定最大值},它显示开始时的错误,在TextBlock中找不到Text属性。我也试图将DataContext设置为{RelativeSource Self},但它没有显示DataContext属性未找到的错误。

如何使所描述的进度栏标签正确?

回答

0

好吧,好像我找到了一种方法。这不是最好的,但如果你不需要一个通用的解决方案,它就可以工作。所以,我所做的只是创建多个进度条样式,然后在每种类型的进度条中将其类型指定为转换器的字符串参数。

然后在转换器中(对于所有进度条,这个保持不变)我检查参数,并使用常数或直接请求进度条的最大值来指定该工具栏的最大数量。

虽然,仍然很想听到一个通用的解决方案。

0

尝试将TextBox绑定到父级,然后您的值转换器可以访问Value和Maximum。 {Binding RelativeSource={RelativeSource TemplatedParent}}

然后您的值转换器可以将对象转换为ProgressBar并直接使用这些值。