绑定到数据模板内的网格行高

本文关键字:网格 数据 绑定 | 更新日期: 2023-09-27 18:13:21

如果我在 WPF 中有一个ListBox,里面有一个Grid,它DataTemplate,我将如何正确引用该Grid的各种ColumnDefinition

我要做的是有一个包含网格的ListBox,每个网格有 3 列。最后 2 列的圆圈可以是红色或绿色。为了画圆,我正在使用 Ellipse ,为了将其变成一个圆,我只想将椭圆的宽度绑定到该GridRow高度。

由于ListBox中每个Grid只有 1 行,这应该导致无论我如何调整ListBoxGrid的大小,Ellipse都保持为圆圈。

但是,我遇到了麻烦,从Grid内部正确引用该RowDefinition,而本身就在DataTemplate内。我目前拥有以下内容:

<ListBox Grid.Row="0" x:Name="TermServListBox" ItemsSource="{Binding TermServs}">
    <ListBox.Resources>
        <converter:ValidPathToBgColor x:Key="ValPthToBgClr"/>
    </ListBox.Resources>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="MainTermServListGrid">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding TServer}"/>
                <Ellipse Grid.Column="1" Width="{Binding ElementName=MainTermServListGrid, Path=RowDefinitions/ActualHeight}" Fill="{Binding IsOldPathValid, Converter={StaticResource ValPthToBgClr}}"/>
                <Ellipse Grid.Column="2" Width="{Binding ElementName=MainTermServListGrid, Path=RowDefinitions/Height}" Fill="{Binding IsNewPathValid, Converter={StaticResource ValPthToBgClr}}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这导致每个椭圆都是一个大的椭圆(椭圆(形状,而不是我想要的圆,我认为这是由于我的绑定不当造成的。有没有其他方法可以绑定到存在于您已经所在的同一DataTemplate中的属性?

绑定到数据模板内的网格行高

我认为您要查找的是 Stretch="Uniform" 这应该画一个圆圈来填充您行中的空间。