0

我有一个这样定义的 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>

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

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

谢谢!

4

2 回答 2

5

我终于通过将祖先类型指定给 GridViewPresenter 来让它工作,就像这样。

<Border Background="{Binding Brush}" Width="40" Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GridViewRowPresenter}}, Path=ActualHeight}" />
于 2012-03-21T10:18:56.430 回答
-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:如果以上都不起作用,请尝试在模板中插入网格或面板,以便它继承高度并将其转发到边框。(就 Measure 继承而言,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>
于 2012-03-20T09:54:44.747 回答