2016-07-26 2 views
0

У меня есть ScrollViewer, который содержит Grid, имеющие два ряда высоты '*'Почему ScrollViewer переопределяет высоту строки сетки в wpf?

<ScrollViewer> 
    <Grid HorizontalAlignment="Stretch"> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <GroupBox Grid.Row="0" Grid.Column="0"      
        Header="XYZ" 
        VerticalAlignment="Stretch"  
        HorizontalAlignment="Stretch" 
        Margin="0,10,0,0" 
        Width="Auto" MinWidth="160" 
        BorderThickness="0" 
        Style="{StaticResource MyGroupBoxStyle}"> 
     <ListBox Name="lstMentorGroups" IsSynchronizedWithCurrentItem="True"      
        ItemsSource="{Binding Path=MyCollection}" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        Style="{StaticResource MyListBoxStyle}"> 
      <ListBox.ItemTemplate> 
      <DataTemplate > 
       <TextBlock Text="{Binding Path=Name}"/> 
      </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     </GroupBox> 

     <GroupBox Grid.Row="1" Grid.Column="0" MinWidth="160"   
        Header="ABC" Margin="0,10,0,0" 
        VerticalAlignment="Stretch" 
        HorizontalAlignment="Stretch" 
        BorderThickness="0" 
        Style="{StaticResource MyGroupBoxStyle}"> 
     <ListBox ItemsSource="{Binding Path=List1, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
        HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
        Style="{StaticResource MyListBoxStyle}" Margin="0,0,5,0"> 
      <ListBox.ItemTemplate> 
      <DataTemplate > 
       <TextBlock Text="{Binding Path=Prop1}"/> 
      </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     </GroupBox> 
    </Grid> 
</ScrollViewer> 

Но во время выполнения первой группы окно получает полную высоту необходимо его содержащей ListBox, что означает, что он перекрывает Сетки высоту * для автоматической

Он отлично работает, если я не использую scrollviewer, он дает 50-50% высоты каждому групповому ящику.

ответ

0

Как Grid помещается в ScrollViewe г поэтому она занимает все пространство насколько это требует контроль. И я не хочу показывать вертикальную полосу прокрутки.

Я просто установить Grid MaxHeight в ScrollViewer ActualHeight

MaxHeight="{Binding ElementName=ScrollViewer, Path=ActualHeight}"

0

Вам нужно установить высоту сетки, если она находится в ScrollViewer, в противном случае сетка будет иметь столько же высоты, сколько потребуется, что означает, что ListBox в Grid получит неограниченную высоту, чтобы отображать ее элементы.

+0

Я не хочу, чтобы дать высоту к сетке, именно поэтому я использую ScrollViewer –

0

Чтобы убедиться, что оба ряда имеет ту же высоту, вы должны использовать SharedSizeGroupe Так что вы должны сделать, это:

<ScrollViewer> 
<Grid HorizontalAlignment="Stretch" Grid.IsSharedSizeScope="True"> 
    <Grid.RowDefinitions> 
    <RowDefinition SharedSizeGroup="A" /> 
    <RowDefinition SharedSizeGroup="A" /> 
    </Grid.RowDefinitions> 
    <GroupBox Grid.Row="0" Grid.Column="0"      
       Header="XYZ" 
       VerticalAlignment="Stretch"  
       HorizontalAlignment="Stretch" 
       Margin="0,10,0,0" 
       Width="Auto" MinWidth="160" 
       BorderThickness="0" 
       Style="{StaticResource MyGroupBoxStyle}"> 
    <ListBox Name="lstMentorGroups" IsSynchronizedWithCurrentItem="True"      
       ItemsSource="{Binding Path=MyCollection}" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       Style="{StaticResource MyListBoxStyle}"> 
     <ListBox.ItemTemplate> 
     <DataTemplate > 
      <TextBlock Text="{Binding Path=Name}"/> 
     </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    </GroupBox> 

    <GroupBox Grid.Row="1" Grid.Column="0" MinWidth="160"   
       Header="ABC" Margin="0,10,0,0" 
       VerticalAlignment="Stretch" 
       HorizontalAlignment="Stretch" 
       BorderThickness="0" 
       Style="{StaticResource MyGroupBoxStyle}"> 
    <ListBox ItemsSource="{Binding Path=List1, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
       HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
       Style="{StaticResource MyListBoxStyle}" Margin="0,0,5,0"> 
     <ListBox.ItemTemplate> 
     <DataTemplate > 
      <TextBlock Text="{Binding Path=Prop1}"/> 
     </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    </GroupBox> 
</Grid> 

+0

Я попробовал ваше решение, но оно не работает. Тогда я нашел другое решение для этого. –

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