【问题标题】:Give a WPF Grid the width of a ScrollViewer minus the scrollbar给 WPF Grid 一个 ScrollViewer 减去滚动条的宽度
【发布时间】:2011-01-29 10:04:37
【问题描述】:

我有一个 WPF 用户控件,上面有两个网格。底部网格位于 ScrollViewer 中。这个想法是让第一个网格成为第二个网格的标题。但是,我在列的宽度方面遇到了问题。两个 Grid 都应该占据所有空间(窗口的宽度),但顶部 Grid 的宽度当然应该小一些,因为底部 Grid 的右侧有一个滚动条。

这是我得到的简化的 Xaml:

<UserControl>
    <DockPanel>
        <Grid DockPanel.Dock="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
        </Grid>
        <ScrollViewer>
            <Grid>
                <Grid.ColumnDefintions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefintions>
            </Grid>
        </ScrollViewer>
    </DockPanel>
</UserControl>

这实际上渲染得很好,除了顶部 Grid 的最右列延伸到滚动条上,我想避免这种情况。!

这是结果的图像:Grid column and width of scrollbar。红色表示列/单元格现在的位置,但我希望它停在蓝线处。我已经尝试过 SharedSizeGroups,但这似乎使我的网格再次变小(不占用窗口的全部空间)。

【问题讨论】:

    标签: wpf grid width scrollviewer


    【解决方案1】:
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Name="sv">
        <Grid MinWidth="{Binding ElementName=sv, Path=ViewportWidth}" MinHeight="{Binding ElementName=sv, Path=ViewportHeight}" />
    </ScrollViewer>
    

    问题是在 ScrollViewer 容器大小和网格大小之间建立正确的依赖关系。让我们只考虑宽度:上面的绑定允许 ScrollViewer 仅在必要时公开水平滚动条:

    放大网格的单个列(例如,使用拆分器)不会引起其他列的大小调整(如果您绑定Width 而不是MinWidth,则会发生这种情况)。

    使用ViewportWidth 代替ActualWidth 会考虑滚动条宽度(如果有的话)。

    试试吧

    【讨论】:

    • 您能解释一下为什么这个答案有效或有用吗?
    • 问题是在 ScrollViewer 容器大小和网格大小之间建立正确的依赖关系。让我们只考虑宽度:上面的绑定允许 ScrollViewer 仅在必要时显示水平滚动条:放大网格的单个列(例如,使用拆分器)不会引起其他列的大小调整(如果您绑定 Width 而不是 MinWidth)。使用 ViewportWidth 而不是 ActualWidth 会考虑滚动条宽度(如果有的话)。试试吧
    • 当您被要求“解释”时,您应该“编辑”您的回复并将解释包含在您回复的“正文”中。不在cmets中。为你做的。
    • 谢谢布雷克斯,请原谅我的经验不足
    【解决方案2】:

    找到解决方案here。我给了我的顶部Grid Width

    Width="{Binding ElementName=BottomGrid, Path=ActualWidth}"
    

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 2011-01-02
      • 1970-01-01
      • 2021-06-11
      • 2020-10-17
      相关资源
      最近更新 更多