绑定到数据模板内的网格行高
本文关键字:网格 数据 绑定 | 更新日期: 2023-09-27 18:13:21
如果我在 WPF 中有一个ListBox
,里面有一个Grid
,它DataTemplate
,我将如何正确引用该Grid
的各种ColumnDefinition
?
我要做的是有一个包含网格的ListBox
,每个网格有 3 列。最后 2 列的圆圈可以是红色或绿色。为了画圆,我正在使用 Ellipse
,为了将其变成一个圆,我只想将椭圆的宽度绑定到该Grid
的Row
高度。
由于ListBox
中每个Grid
只有 1 行,这应该导致无论我如何调整ListBox
或Grid
的大小,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" 这应该画一个圆圈来填充您行中的空间。