WPF。在GridViewColumn中绑定到单元格的高度?

时间:2012-03-20 06:12:13

标签: wpf data-binding gridview datagridviewcolumn

我有一个像这样定义的GridView:

            <ListView x:Name="colorLegend" Background="Transparent" ItemsSource="{Binding /Colors}">
            <ListView.Resources>
                <Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Style>
            </ListView.Resources>
            <ListView.View>
                <GridView ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}">
                    <GridViewColumn Header="Image" Width="100">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Border Background="{Binding Brush}" Height="20" Width="40" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Width="auto" />
                </GridView>
            </ListView.View>
        </ListView>

我希望第一个单元格内边框的高度与单元格列的高度一样高。 我可以将边框的高度绑定到第二个单元格的高度吗?

我想要的是能够更改第二个单元格和第一个边框的字体大小以调整大小以匹配更改?

谢谢!

2 个答案:

答案 0 :(得分:4)

我终于通过将ancestorType指定为GridViewPresenter来实现它,就像这样。

<Border Background="{Binding Brush}" Width="40" Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GridViewRowPresenter}}, Path=ActualHeight}" />

答案 1 :(得分:-1)

而不是使用高度,我宁愿在这种情况下使用VerticalAlignment=Stretch

<DataTemplate>
    <Border Background="{Binding Brush}" VerticalAlignment="Stretch" Width="40" />
</DataTemplate>

这应该可以解决问题

(在这种情况下,您可能还需要MinHeight,仅为了安全起见)

注意:在你希望高度只是填充你拥有的空间但是不能将它绑定到任何东西的情况下,VerticalAlignment属性也可以用来设置Height = *的等价物是一个常见的问题。 。 VerticalALignment = Stretch或Horizo​​ntalAlignment = Stretch实际上非常有用,虽然不是很有名,但遗憾的是。

编辑:如果这不起作用,您可能希望尝试绑定到父级,如下所示:

<DataTemplate>
    <Border Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorLevel=1}}" Background="{Binding Brush}" Width="40" />
</DataTemplate>

(免责声明:我没有在GridViewColumn的CellTemplate中尝试这个,所以如果它不起作用的话不要开枪)

编辑2:如果上述内容无效,请尝试在模板中插入网格或面板,以便继承高度并将其转发到边框。 (就测量继承而言,AFAIK,网格和面板的行为不像边界):

<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>