C#WPF进度条ControlTemplate更新文本

时间:2010-10-29 15:07:53

标签: c# wpf xaml

我为进度条创建了一个控件模板,其中包含一个文本块,我想根据下载的文件的百分比将更新文本放入其中。

我没有问题获得%等等。我只是想知道如何从c#代码中定位文本块。

这是我的controltemplate

<Style TargetType="{x:Type ProgressBar}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ProgressBar}">
                <Grid>
                    <Rectangle Stroke="#FF000000" RenderTransformOrigin="0.5,0.5" x:Name="PART_Track" RadiusX="5" RadiusY="50">
                        <Rectangle.Fill>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="White" Offset="0" />
                                <GradientStop Color="Gray" Offset="1"/>
                            </LinearGradientBrush>
                        </Rectangle.Fill>
                    </Rectangle>

                    <Rectangle Stroke="#FF000000" RenderTransformOrigin="0.5,0.5" x:Name="PART_Indicator" HorizontalAlignment="Left" RadiusX="5" RadiusY="50">
                        <Rectangle.Fill>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FF023501" Offset="1.0"/>
                                <GradientStop Color="#FFB6F9B4" Offset="0"/>
                            </LinearGradientBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                    <Viewbox>
                        <TextBlock TextAlignment="Center" Background="Transparent" FontFamily="Times" Foreground="Black" x:Name="ProgressText" Margin="2,2,2,2">Test
                        </TextBlock>
                    </Viewbox>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在我的屏幕上看起来由于某种原因它没有显示所有代码,无论如何,我正在尝试将TextBlock x作为目标:名称为“ProgressText”

1 个答案:

答案 0 :(得分:1)

您是否尝试将文本绑定到组合框值?

<TextBlock TextAlignment="Center" Foreground="Black" x:Name="ProgressText"
           Margin="2,2,2,2"
           Text={TemplateBinding Value,
                                 Converter={StaticResource DoubleToPercent}}/>

当然,您需要指定一个转换器,但作为概念验证,您可以尝试使用它。

编辑:
您必须使用多重绑定,因为您的百分比值还取决于最小值和最大值:

<TextBlock TextAlignment="Center" Foreground="Black" x:Name="ProgressText"
           Margin="2,2,2,2">
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource DoubleToPercent}">
            <TemplateBinding Path="Value" />
            <TemplateBinding Path="Minimum" />
            <TemplateBinding Path="Maximum" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

免责声明:我没有尝试此代码。