始终在WPF中保持列宽相等

时间:2015-09-17 16:36:05

标签: c# wpf

我目前有一个WPF应用程序,其中包含ListBoxGrid个项目。

这些网格各有2列,第一列包含文本,第二列包含椭圆。

我的问题是,我目前将ColumnDefinition设置为宽度为.5*,因此它们各自占据总宽度的50%。但是,当文本太长或者第二列中的椭圆与列表中的其余椭圆(与上下垂直查看)不一致时,这不起作用。

基本上这就是我得到的:

enter image description here

我想要发生的是,无论第一栏中的文字有多长,所有的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>

1 个答案:

答案 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>

使用SharedSizeScopeSharedSizeGroup,您可以确保相同不同网格的列/行相同尺寸包含范围

  

注意:它不必是ItemsControl任何使用附加属性的容器Grid.IsSharedSizeScope将确保其中包含的网格将引起注意。