【问题标题】:WPF - How do I get scollviewer to act proeprly?WPF - 如何让滚动查看器正常运行?
【发布时间】:2015-07-17 11:08:50
【问题描述】:

我有一个网格,在该网格中我有以下内容:

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

所以,我显然已经取出了不需要显示我的问题的东西。当 Datagrid 填满时,它需要的空间显然会增加。我打算尽可能地填写它,然后滚动查看器将完成其余的工作。但是,它似乎认为它可以有无限长度,并且滚动查看器实际上从不滚动。

我不想手动设置 maxheight 值,因为 TabControl 上方有移动内容,所以它会改变(加上窗口大小调整等)。我如何让滚动查看器的扩展不超过窗口/父网格到 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>

【问题讨论】:

  • DG 在其ItemsPanel 中使用ScrollViewer。您的代码没有多大意义,因为即使滚动有效,向下滚动也会使 DG 列标题不可见。问题出在其他地方 - 可能是发布最小标记会更好,它会重现这种行为(您发布的那个没有)。

标签: c# wpf scrollview


【解决方案1】:

如果你需要垂直滚动条试试这个或者改成horizo​​ntalScrollBar。并将 CanContentScroll 属性设置为 true。

<TabControl Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3">
    <TabItem Header="Weapons">
       <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"  CanContentScroll="True">
            <StackPanel Orientation="Vertical">
                <GridView>
                ...
                </GridView>
            </StackPanel>
        </ScrollViewer>
     </TabItem>
</TabControl>

试试它是否有效,或者更新我。

如果您想要窗口的大小,请尝试将其与窗口高度一起使用。它会一直扩大到窗口大小。

【讨论】:

  • 试过了,没用,抱歉。效果和之前一样。
  • 默认情况下,滚动查看器具有无限增长的属性,如果您不指定大小,一旦您指定大小并且内容滚动属性为 true,它就会成功。
  • 是否有不同的方式不必指定大小,但允许它展开直到达到窗口/容器的限制,然后开始滚动?
  • 我已经编辑了我的答案,并尝试将您的窗口大小设置为要增长的大小,然后让它滚动。希望它对你有用。
  • 试试窗口高度?我会把它放在哪里,滚动查看器的 MaxHeight ?如果是这样,将无法正常工作。 scrollviewer 不会占据窗口的整个高度,只占其中的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
相关资源
最近更新 更多