【问题标题】:How do I stop Scrollviewer from expanding to infinite height?如何阻止 Scrollviewer 扩展到无限高度?
【发布时间】:2015-07-17 14:06:55
【问题描述】:

我有一个网格,有 3 行。 第 2 行的高度可变,窗口可调整大小,我在第 3 行有一个数据网格,保存在滚动查看器中,在选项卡控件中。

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

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

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

我看到的示例:

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

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

浓缩的“完整”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>

【问题讨论】:

  • 请问,css 和 wpf 有什么关系?而且我认为您可以将数据网格直接转储到 tabitem 并取消滚动查看器。数据网格有一个内置的滚动查看器,可以按预期工作。还有,css?是的,我又回来了。
  • 抱歉 - 我从推荐的标签中单击它,在我的脑海中将其读取为 C# 而不是 CSS。 daragrid 不会自行滚动,如屏幕截图所示。 :(
  • WPF DataGrids 当然可以。你可能正在做一些其他奇怪的事情......
  • DataGrid 不会自行滚动,因为您在滚动查看器中拥有它。你会尝试建议吗?并发布网格列和行定义。
  • 我打开设置让 Datagrid 滚动,但它与包含滚动查看器的功能完全相同。它到达窗口底部,但在该点之后继续添加内容。

标签: c# wpf scrollviewer


【解决方案1】:

好的,终于找到问题了。

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

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多