2015-09-17 2 views
0

I current имеет приложение WPF, которое содержит ListBox из Grid элементов.Всегда сохраняйте ширину столбца в WPF

Эти решетки имеют по 2 столбца каждый, а первый столбец содержит текст, а второй содержит эллипс.

Моя проблема в том, что у меня в настоящее время установлены как ColumnDefinition, так и ширина .5*, поэтому каждый из них занимает 50% от общей ширины. Однако это не работает, когда текст слишком длинный, или же он выталкивает эллипс во втором столбце из строя с остальными эллипсами в списке (смотря вертикально сверху вниз).

В основном это то, что я получаю:

enter image description here

То, что я хотел бы случиться, не имеют все elipses в линию, независимо от того, сколько времени текст в первом столбце.

Я попытался разместить текст первого столбца внутри ViewBox, чтобы автоматически его настроить, но это тоже не работает.

Вот полный XAML для DataTemplate:

<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

Вы можете вставить таблицу данных из списка? – kanchirk

+0

Добавил его в мое главное сообщение @kanchirk – user2357446

+0

The, 5 это полностью избыточно. Если вы установите ширину столбца только в «*», они разделится на 50% для каждого из двух столбцов. – user3690202

ответ

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, вы можете обеспечить столбцы/rows - одинакового размера через различные сетки в пределах одной и той же , содержащие прицел

ПРИМЕЧАНИЕ: Это не должны быть ItemsControl любой контейнер, используя вложенное свойство Grid.IsSharedSizeScope гарантирует, что сетки, содержащиеся в обратят внимание.

Смежные вопросы