弹出控件VerticalAlignment不会"捕获"

Ela*_*atz 5 silverlight wpf 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>
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Ric*_*key 9

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

换句话说,Popup并没有真正参与主窗口的布局.所以改变之类的东西HorizontalAlignment没有任何效果,因为该属性控制布局如何定位和调整此元素相对于其包含元素的大小.

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

我可以给出的第一个建议是了解放置属性,PlacementTarget以及Placement.您可以使用这些属性来定位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>
Run Code Online (Sandbox Code Playgroud)