WPF ProgressBar宽度未调整为文本大小

时间:2016-02-19 19:49:31

标签: c# wpf

我遇到了Microsoft WPF ProgressBar的问题。我将设置宽度=“自动”,宽度将调整为文本宽度,直到值属性为~97。在值97和100之间,控件将以指数方式变大,直到达到MaxWidth。

以下样式是为ProgressBar设置模板。我似乎无法找到任何会导致它直到值为97的行为。我没有触及后面代码中的宽度。

<Style x:Key="CurrentDayProgressBar"   TargetType="{x:Type ProgressBar}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ProgressBar}">
                <Grid>
                    <Border Name="PART_Track" CornerRadius="2" Background="DarkGray" BorderBrush="{DynamicResource TextBrush}" BorderThickness="1" />
                    <Border Name="PART_Indicator" CornerRadius="2" Background="{DynamicResource ProgressBarBackground}" HorizontalAlignment="Left" Margin="2" />
                    <TextBlock Name="PART_Text" Margin="2" Width="Auto" Padding="5,0,5,0" Text="{Binding RelativeSource={RelativeSource AncestorType=ProgressBar}, Path=Tag}" 
                               Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{DynamicResource SimpleTextBlock}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

下面的第一张图片是条形值为99.2时的样子。第二个是我在Telerik RadProgressBar中的实现,其行为与我期望的一样。 Telerik解决方案可能是我必须使用的,但是很高兴知道Microsoft控件无法正常工作。

WPF ProgressBar Control

Telerik RadProgressBar and Textbox

1 个答案:

答案 0 :(得分:1)

PART_Track不能附加任何额外的边距/边框和/或PART_Indicator应该嵌套在其中。要解决您遇到的问题,请执行以下操作:

<Border CornerRadius="2" Background="DarkGray" BorderBrush="{DynamicResource TextBrush}" BorderThickness="1" />
<Border x:Name="PART_Track" Margin="3">
    <Border Name="PART_Indicator" CornerRadius="2" Background="{DynamicResource ProgressBarBackground}" HorizontalAlignment="Left" />
</Border>    
<TextBlock  ... />