0

这是银光。

最初的目标是在弹出窗口中显示一个带有一些 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)来完成它时。我想知道什么是最简单、最高效和处理器友好的透明 FrameworkElement 来封装另一个具有工作 Horizo​​ntalAlignment 和 VerticalAlignment 的元素?是吗:

  • 边界?(如上面的例子)
  • 用户控制?
  • 内容控制?
  • 内容容器?
  • 一些自定义和基本的 MyFrameworkElement?(可能需要大多数基本实施的帮助)
  • 网格之类的其他东西?
4

1 回答 1

1

WPF 控件有两种风格:与用户交互的控件(例如像按钮一样接受用户单击,或像文本块一样显示文本)和控制先前控件的放置和布局的容器。

容器控件通常设计为以特定方式布置其子级。例如,画布按 X、Y、宽度和高度值排列子级。每个都有特定的用途,因此您必须阅读这些容器控件的文档或教程,并了解每个控件的工作原理,以便为任务选择合适的控件。

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

<Popup><Grid><Button /></Grid></Popup>
于 2014-09-11T14:45:15.183 回答