вместо использования высоты, я бы лучше использовал VerticalAlignment=Stretch
в этом случае:
<DataTemplate>
<Border Background="{Binding Brush}" VerticalAlignment="Stretch" Width="40" />
</DataTemplate>
это должно сработать
(в этом случае вам также может понадобиться MinHeight, просто для безопасности)
NB. Общеизвестно, что свойство VerticalAlignment также можно использовать для установки эквивалента высоты = * в тех случаях, когда вы хотите, чтобы высота просто заполняла пространство, которое у вас есть, но не в состоянии связать его с чем-либо , VerticalALignment = Stretch или HorizontalAlignment = Stretch на самом деле очень полезен, хотя, к сожалению, не очень известен.
edit: если это не сработает, вы можете попробовать привязать к родителю вот так:
<DataTemplate>
<Border Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorLevel=1}}" Background="{Binding Brush}" Width="40" />
</DataTemplate>
(Отказ от ответственности: я не пробовал это в CellTemplate GridViewColumn, поэтому не стреляйте в меня, если он не работает)
edit 2: если ничего из вышеперечисленного не работает, попробуйте добавить в ваш шаблон таблицу или сетку, чтобы она унаследовала высоту и могла перенаправить ее на границу. (AFAIK, Grid и Panels не ведут себя как границы в отношении наследования меры):
<DataTemplate>
<Grid>
<Border Background="{Binding Brush}" VerticalAlignment="Stretch" Width="40" />
</Grid>
</DataTemplate>
или
<DataTemplate>
<Grid Name="grid" VerticalAlignment="Stretch">
<Border Background="{Binding Brush}" Width="40" Height="{Binding ActualHeight ElementName=grid}" />
</Grid>
</DataTemplate>