最简单的FrameworkElement来处理Horizo​​ntalAlignment和VerticalAlignment?

时间:2014-09-11 14:28:05

标签: c# silverlight popup alignment frameworkelement

这是Silverlight。

最初的目标是在Popup中显示一个随机元素,其中包含一些VerticalAlignment和Horizo​​ntalAlignment。我不想使用VerticalOffset或Horizo​​ntalOffset,因为我真正想要做的更多,包括一些复杂的绑定。

首次尝试是:

<Popup>
    <Button
        Height="135"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Bottom" />
</Popup>

第二次尝试是:

<Popup
    Height="135"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Bottom">
    <Button />
</Popup>

两者都失败了:Button始终位于Top而不是Stretch(Horizo​​ntalAlignment和VerticalAlignment不起作用)。

所以我有想法将元素封装在一个简单的FrameworkElement中:

<Popup>
    <Border>
        <Button
            Height="135"
            HorizontalAlignment="Stretch"
            VerticalAlignment="Bottom" />
    </Border>
</Popup>

它正在发挥作用。

但是我必须在此示例中使用Border,当我可以使用Grid和许多其他FrameworkElement(但不能使用Canvas或Viewbox或Popup)时使用{{1}}。我想知道什么是最简单,高效和处理器友好的透明FrameworkElement,用工作Horizo​​ntalAlignment和VerticalAlignment封装另一个元素?是吗:

  • 边界? (如上例所示)
  • 用户控件?
  • ContentControl中?
  • ContentContainer?
  • 一些自定义和基本的MyFrameworkElement? (对于大多数基本实现可能需要帮助)
  • 像Grid这样的东西?

1 个答案:

答案 0 :(得分:1)

WPF控件有两种形式:与用户交互的用户(如接受用户点击,如按钮,或显示文本块等文本)和控制前一个用户位置和布局的容器。

容器控制通常用于以特定方式布置他们的孩子。例如,Canvases通过X,Y,Width和amp;高度值。每个都有特定用途,因此您必须read the documentation or tutorials for these container controls并了解每个工作方式,以便为任务选择合适的一个。

在您的情况下,您希望按钮填充弹出窗口中的所有可用空间(似乎,它不是那么清楚)。我知道网格默认是这样做的。所以我会做以下事情:

<Popup><Grid><Button /></Grid></Popup>