【问题标题】:Allow WPF Grid cell content to expand outside of the grid cell?允许 WPF 网格单元格内容扩展到网格单元格之外?
【发布时间】:2011-09-14 08:43:34
【问题描述】:

我的 WPF 窗口中有一个网格。当按下特定按钮时,我希望其中一个 Grid 单元格中的控件向下扩展以使其原始大小翻倍。发生这种情况时,控件将被裁剪到包含单元格的可视边界。但是,我需要在下面的单元格顶部显示所有内容。我尝试将 Panel.ZIndex 设置为高值,但无济于事。我基本上需要在 CSS 中模拟“溢出:可见”的功能。这在 WPF/Xaml 中可行吗?

【问题讨论】:

  • 你试过 ClipToBounds = false 吗?

标签: wpf xaml layout grid


【解决方案1】:

您可以通过弹出窗口执行此操作:http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.popup.aspx,尤其是如果您希望溢出忽略窗口边界(例如,涉及装饰器的解决方案可能不会)。您希望将控件放入弹出窗口中,然后扩展弹出窗口的高度以获得溢出效果。您可能需要在弹出窗口后面放置另一个面板或其他东西,以确保未展开的大小保持正确。

【讨论】:

    【解决方案2】:

    将单元格内控件的ClipToBounds 属性设置为False,然后将单元格的内容包装在Canvas 中。 Canvas 可以保证越界,并非所有控件都如此(例如按钮)。

    例子:

    <Canvas Grid.Row="5" Grid.Column="3">
        <TextBlock Text="Long text here" ClipToBounds="False">
    </Canvas>
    

    【讨论】:

    • 对 Silverlight 的评论:在 WPF (msdn.microsoft.com/en-us/library/…) 中的控件类上没有“ClipToBounds”属性。在 Silverlight 中,将控件包装在 Canvas 中就足够了。
    • 请注意,画布只会打破其父容器的边界。如果它们是树上更多的祖先元素,画布仍将绑定到它们。
    • 如果将一个元素放在 Canvas 面板中,则其中的元素根本不参与布局,您最终会破坏您的布局
    【解决方案3】:
    • 使用 RowSpan 或 columnspan
    • 定义网格时,将单元格放在底部。由于渲染引擎从上到下渲染,并且您希望此单元格位于其他单元格之上。您也许可以摆脱 zindex,但我会尽量减少维护 zindex。

    【讨论】:

    • 这就是答案,因为ClipToBounds="True" 在网格行宽不固定时不会保留显示组件所需的空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多