+2  A: 

Here's one alternative:

<Border BorderBrush="Black" BorderThickness="2" CornerRadius="3" Padding="3">
    <Grid Width="20" Height="100">
        <Grid Height="{Binding ProgressValue}" VerticalAlignment="Bottom">
            <Grid Height="100" VerticalAlignment="Bottom">
                <Grid.Background>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                        <GradientStop Color="Yellow" Offset="0.0" />
                        <GradientStop Color="Red" Offset="0.25" />
                        <GradientStop Color="Blue" Offset="0.75" />
                        <GradientStop Color="LimeGreen" Offset="1.0" />
                    </LinearGradientBrush>
                </Grid.Background>
            </Grid>
        </Grid>
    </Grid>
</Border>

Note the third line from the top, that is where you bind your progress value.

Aviad P.
Your code is not exactly how ProgressBar's template works, but, yes, nesting an additional Grid (or Border) inside PART_Indicator, aligning it to the bottom, and binding its Height to PART_Tracks's ActualHeight did the trick.
CannibalSmith
If my answer inspired you to find a solution - I'm happy :)
Aviad P.
A: 

This seems like it could easily be converted to what you're looking for.

http://mattserbinski.com/blog/look-and-feel-progressbar

Tom
A: 

Write a selfhump function and have it recurse until you get the correct result.

Oh yeah