WPF中的XAML弹出溢出

时间:2016-08-02 00:18:31

标签: wpf xaml

我有一个看起来像这样的Popup:

<local:toolbox_popup x:Name="PopupBaseMapLayers" Grid.Row="1" StaysOpen="False" PopupAnimation="Fade" VerticalAlignment="Stretch" AllowsTransparency="True" PlacementTarget="{Binding ElementName=tooldropdown}" PlacementRectangle="-280,0,0,0" > <StackPanel> <ScrollViewer VerticalScrollBarVisibility="Auto" VerticalAlignment="Stretch" > </SrollViewer> </StackPanel> </local:toolbox_popup>

因此,当用户单击按钮时弹出窗口,但弹出窗口溢出窗口的时间长短。有没有办法在窗口中隐藏溢出或将弹出窗口的高度设置为动态的,无论窗口的大小是什么?

2 个答案:

答案 0 :(得分:0)

根据Popup Size上的MSDN参考,弹出窗口会根据内容调整大小。

  

默认情况下,弹出窗口会根据其内容自动调整大小。什么时候   发生自动调整大小时,可能会隐藏一些位图效果,因为   为Popup内容定义的屏幕区域的默认大小   没有为位图效果提供足够的空间来显示。

     

设置RenderTransform时,弹出内容也可能会被遮挡   内容。在这种情况下,如果有一些内容可能会被隐藏   转换后的Popup的内容超出了该区域的范围   原始弹出窗口。如果位图效果或变换需要更多空间,   您可以在Popup内容周围定义边距以便提供   更多的控制区域。也许你的Popup内容正在调整大小   由于您限制布局容器中的增长而导致的问题?   因此,您的弹出窗口会相应调整大小,但您的网格可能会相应   有一个固定的宽度。

无论如何,您可以尝试根据弹出构造函数中的父窗口设置弹出窗口的宽度和高度,如下所示:

this.Height = Application.Current.MainWindow.Height;
this.Width = Application.Current.MainWindow.Width;

答案 1 :(得分:0)

在你的问题中需要考虑很多事情。什么应该是可行的最小宽度,用于显示此Popup的按钮的确切位置。这些Buttons是否位于窗口的右下角?

考虑一切,我建议采用以下设置来解决您的问题。

<Popup x:Name="Popup1" Placement="Relative" PlacementTarget="{Binding ElementName=Grd}" StaysOpen="False"  Width="{Binding PlacementTarget.ActualWidth, RelativeSource={RelativeSource Self}}">
...
</Popup>

我已将PlacementTarget设置为最顶层的容器Grid。如果我们点击外面的任何地方,StatysOpen = False会导致Popup消失。您甚至可以选择Window作为PlacementTarget

然后还有另一个名为PlacementRectangle的属性来放置它,您可以将BindingConverter一起应用以返回Rectangle

如果这可以解决您的问题,请告诉我。