如何将弹出窗口大小设置为其内容大小?

4

我在WPF中有一个弹出控件,它动态加载内容并且每次我需要设置其大小时,如何自动完成这一过程,让其始终保持与内容大小相同。

<Popup 
      Name="popup1" 
      StaysOpen="False" 
      PlacementTarget="{Binding ElementName=myButton}" 
      Placement="Custom" 
      PopupAnimation="Fade" 
      AllowsTransparency="True">
2个回答

8
默认情况下,弹出窗口(Popup)的大小会根据其内容自动调整。当自动调整大小时,某些位图效果可能会被隐藏,因为 Popup 内容所定义的屏幕区域的默认大小不足以显示位图效果。如果在内容上设置 RenderTransform,则可能会遮挡 Popup 内容。在这种情况下,如果变换后的 Popup 内容超出了原始 Popup 的区域,则某些内容可能会被隐藏。如果位图效果或变换需要更多空间,则可以在 Popup 内容周围定义边距以提供更多控件区域。也许您的 Popup 内容由于布局容器内限制增长而存在大小问题?例如,您的 Popup 因此被调整大小,但是您的 Grid 可能具有固定宽度。请注意,本文不含解释,HTML 标签已保留。

1

我很久以前也遇到了类似的问题,我想说这是因为弹出窗口不是可视树的一部分,因此您无法根据动态内容重新呈现它。我的解决方法是创建一个子控件,看起来像弹出窗口,但是它是可视树的一部分,一切都按预期工作。

这只是一个模糊的旧记忆,但它可以成为寻找更具体答案的良好跳板。


你永远无法创建一个属于可视树的窗口。 - H.B.
也许我只是想用一个带有遮罩层的子控件来使新控件周围的屏幕变灰,这个新控件是绝对定位的,以使它看起来像是一个弹出窗口,但它仍然只是一个UserControl,因此是视觉树的一部分? - Erik Noren
用户控件总是在某个可视树中,但窗口不能成为任何东西的可视子元素。 - H.B.
我编辑了答案以反映这一点。我只是没有非常具体地表达,并试图传达一个概念。感谢您帮助我稍微澄清一下我的记忆! - Erik Noren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接