弹出控件VerticalAlignment不会“捕获”

时间:2011-05-29 20:27:00

标签: wpf silverlight popup vertical-alignment

我正在使用Popup控件,由于某种原因,它的垂直对齐方式无法正常工作。这是我的XAML:

    <Grid Width="100" Height="30" >
        <TextBox Text="Hello" />
        <Popup IsOpen="True" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" >
            <Button Content="Hello" />
        </Popup>
    </Grid>

我预计Popup的宽度将是100px,与它的父Grid相同。 但是,弹出窗口中的Button的行为就像它的Horizo​​ntalAlignment是Left一样,也就是说,Button的宽度刚好足以允许其中的单词“Hello”,我无法弄清楚为什么,或者如何使它具有与包含网格的宽度相同。

谢谢!

1 个答案:

答案 0 :(得分:9)

不幸的是,Popup不是与定义它的XAML中的其他元素相同的可视树的一部分。它实际上是一个新窗口,虽然它是一个非常简单且通常很小的窗口。

换句话说,Popup并没有真正参与主窗口的布局。因此,更改HorizontalAlignment之类的内容无效,因为该属性控制布局如何定位此元素相对于其包含元素的位置和大小。

这个“孤立元素”问题在处理Popup时不会导致问题的结束。然而,有一些工具和技术可以解决作为单独窗口引入的所有问题。

我可以提供的第一个建议是了解展示位置属性PlacementTargetPlacement。您可以使用这些属性来定位Popup。您还可以使用数据绑定的ElementName语法来处理大小调整。

以下是在您的情况下使用这些技术的示例:

<Grid Name="grid" Width="100" Height="30" >
    <TextBox Text="Hello" />
    <Popup IsOpen="True"
           Placement="Bottom"
           PlacementTarget="{Binding ElementName=grid}"
           Width="{Binding ActualWidth, ElementName=grid}">
        <Button Content="Hello" />
    </Popup>
</Grid>