我目前有一个WPF应用程序,其中包含ListBox
个Grid
个项目。
这些网格各有2列,第一列包含文本,第二列包含椭圆。
我的问题是,我目前将ColumnDefinition
设置为宽度为.5*
,因此它们各自占据总宽度的50%。但是,当文本太长或者第二列中的椭圆与列表中的其余椭圆(与上下垂直查看)不一致时,这不起作用。
基本上这就是我得到的:
我想要发生的是,无论第一栏中的文字有多长,所有的elipses都在线。
我已尝试将第一列的文字放在ViewBox
内以自动调整大小,但这似乎也不起作用。
以下是DataTemplate
的完整XAML:
<Grid x:Name="MainTermServListGrid">
<Grid.RowDefinitions>
<RowDefinition x:Name="MainTermServMainRow"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding TServer}" FontSize="15" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Grid x:Name="OldPathGrid" Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".5*"/>
<ColumnDefinition Width=".5*"/>
</Grid.ColumnDefinitions>
<Viewbox Grid.Column="0" Stretch="Uniform">
<TextBlock Grid.Column="0">
<Run Text="Path: "/>
<Run Text="{Binding OldPath}"/>
</TextBlock>
</Viewbox>
<Ellipse Grid.Column="1" HorizontalAlignment="Center" Width="{Binding ElementName=MainTermServListGrid, Path=ActualHeight}" Fill="{Binding IsOldPathValid, Converter={StaticResource ValPthToBgClr}}"/>
</Grid>
<Grid x:Name="NewPathGrid" Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".5*"/>
<ColumnDefinition Width=".5*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0">
<Run Text="Path: "/>
<Run Text="{Binding NewPath}"/>
</TextBlock>
<Ellipse Grid.Column="1" Width="{Binding ElementName=MainTermServListGrid, Path=ActualHeight}" Fill="{Binding IsNewPathValid, Converter={StaticResource ValPthToBgClr}}"/>
</Grid>
</Grid>
答案 0 :(得分:2)
你应该看看SharedSizeGroup
本质:
<ItemsControl ItemsSource="{Binding SomeItems}"
Grid.IsSharedSizeScope="True">
<ItemsControl.ItemTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="ColA" Width=".5*" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsControl.ItemTemplate>
</ItemsControl>
使用SharedSizeScope
和SharedSizeGroup
,您可以确保相同中不同网格的列/行相同尺寸包含范围
注意:它不必是
ItemsControl
任何使用附加属性的容器Grid.IsSharedSizeScope
将确保其中包含的网格将引起注意。