WPF.Привязать к высоте ячейки в GridViewColumn? - PullRequest
0 голосов
/ 20 марта 2012

У меня 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 ]

4 голосов
/ 21 марта 2012

Наконец-то все заработало, указав ancestorType для GridViewPresenter, например так.

<Border Background="{Binding Brush}" Width="40" Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GridViewRowPresenter}}, Path=ActualHeight}" />
0 голосов
/ 20 марта 2012

вместо использования высоты, я бы лучше использовал 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>
...