【问题标题】:Custom progress bar label text via binding通过绑定自定义进度条标签文本
【发布时间】:2011-02-25 23:30:15
【问题描述】:

我正在使用 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 属性未找到的错误。

如何正确制作描述的进度条标签?

【问题讨论】:

    标签: silverlight data-binding progress-bar


    【解决方案1】:

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

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

    尽管如此,仍然希望听到一个通用的解决方案。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-07-15
        • 2018-06-23
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 2016-05-06
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多