如何阻止Scrollviewer扩展到无限高度?

时间:2015-07-17 14:06:56

标签: c# wpf scrollviewer

我有一个网格,有3行。 第2行具有可变高度,窗口可调整大小,并且我在第3行上有一个数据网格,保存在一个tabcontrol中的scrollviewer中。

当滚动查看器中有许多项目时,滚动查看器会扩展,直到达到"最大高度"可用,但最大高度是无限...所以它不断增长和增长。我想要它做的是停止扩展,如果这意味着它将父网格推出界限,而是使用它的滚动功能...这是它的总体布局:

<TabControl Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3">
    <TabItem Header="Weapons">
        <ScrollViewer>
            <DataGrid>
                ...
            </DataGrid>
         </ScrollViewer>
     </TabItem>
</TabControl>

它保存在一个有3行3列的网格中。行0和1中的内容我没有放在这里,显然我从Datagrid中取出了不必要的信息......

我看到的例子:

This is what it turns out like

根据要求,整个XAML。不完全是短的,这就是为什么我认为上面的简化版本会更好。 XAML - Too large to fit in post

好的,所以它在那里。我正在查看在网格第2行的tabcontrol的不同选项卡中保存的两个数据网格。

凝聚&#34;完整&#34; XAML:

<Grid>
<Grid.ColumnDefinitions>
    <ColumnDefinition />
    <ColumnDefinition />
    <ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
    <RowDefinition />
</Grid.RowDefinitions>

<Grid Grid.Row="0" Grid.Column="1">

    <Image Source="{StaticResource EmptySlot}" Margin="0" Width="34"/>
    <Image Source="{Binding AuraSlot, FallbackValue={StaticResource AuraSlot}}" Margin="0" Width="34"/>
</Grid>

<Popup AllowsTransparency="True" Placement="Relative" PlacementTarget="{Binding ElementName=MainWindowName}" IsOpen="{Binding WeaponTooltipOpen}" HorizontalOffset="{Binding WeaponOffsetX}" VerticalOffset="{Binding WeaponOffsetY}" PopupAnimation="Fade" OpacityMask="White" >
    ...
</Popup>

<Grid Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3">

    <Expander orizontalAlignment="Center">
        <Expander.Header>
            <TextBlock Text="Equipment Slots" HorizontalAlignment="Center" />
        </Expander.Header>

        <Grid Grid.Row="0" Grid.Column="1">
            ...
        </Grid>

    </Expander>
</Grid>

<TabControl Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3">
    <TabItem Header="Weapons">
        <Grid>
            <ScrollViewer CanContentScroll="True" >
                <DataGrid Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" ItemsSource="{Binding GroupedWeapons}" AutoGenerateColumns="False" IsReadOnly="True" AlternatingRowBackground="Gainsboro" AlternationCount="2" RowHeaderWidth="0">
                    <DataGrid.GroupStyle>
                        <GroupStyle>
                            ...
                        </GroupStyle>
                    </DataGrid.GroupStyle>

                    <DataGrid.Columns>
                        ...
                    </DataGrid.Columns>

                    <DataGrid.RowDetailsTemplate>
                        <DataTemplate>
                            <StackPanel>
                                ...
                            </StackPanel>
                        </DataTemplate>
                    </DataGrid.RowDetailsTemplate>

                </DataGrid>
            </ScrollViewer>
        </Grid>
    </TabItem>


</TabControl>
</Grid>

1 个答案:

答案 0 :(得分:0)

好的,最终找到了问题。

我真的不知道为什么这是问题所在,因为它对我来说并没有多大意义,但在代码中,我把东西包裹在堆栈面板中。堆叠的唯一两件事是文本块和网格,网格包含大量其他内容,包括随问题一起发布的所有代码。拿出那个stackpanel使它正常工作,所以我现在使用2个不同的行永久地将堆栈面板替换为另一个网格。 :)