【发布时间】:2014-07-02 15:45:28
【问题描述】:
我使用Adorner 在单击按钮时创建叠加层。此覆盖包含一个表单,例如基于其他UIElements(Button、TextBox 等)的登录表单。
基本上是这样完成的:Click
但是有一个问题。覆盖应填满可用空间。所以我将表单面板的Vertical-/HorizontalAlignment 属性(这是ControlAdorner 的子级)设置为Stretch。但是,它只占用显示面板所需的空间,而不是使用整个可用空间。
我认为这就是原因:ControlAdorner 的方法MeasureOverride 以正确的大小(可用空间)调用。但是随后 Child 的Measure-方法用于计算所需的大小。而且该调用似乎忽略了Stretch 属性。可能是因为 Child 没有设置Parent,因为 Child 是动态生成的。
有没有办法让Adorner 的孩子正常工作?
【问题讨论】:
-
我是否理解正确,从用户的角度来看,当单击按钮时 GUI 应该切换到另一个面板?
-
简单地说,是的。 :) 按钮被点击,表单面板弹出在所有其他
UIElements 之上。面板本身具有半透明背景色并包含表单。但我忘了提到按钮包括。 Overlay-Panel 将被封装在一个单独的 UserControl 中(用于可重用性)。所以结果是一种手势友好的(对于 Kinect)ComboBox:程序员只需要添加这个 ComboBox 并设置装饰元素(例如 KinectRegion 的子元素)并获得一个手势友好的 ComboBox,它将在顶部显示 ComboBoxItems装饰元素(拉伸)。 -
所以你选择装饰器的原因是你想在你的登录表单周围/下面看到原始 UI 的阴影......我明白了......
-
您在使用主窗口的 AdornerLayer 吗?请在添加装饰器的位置显示您的代码...
-
我现在(但明天)无法访问代码。但是 xaml 看起来像这样:窗口包含一个
KinectRegion,其中包含一个AdornerDecorator(因此覆盖层将位于 KinectRegion 下方!),其中包含一个KinectScrollViewer,其中包含一个Panel,其中包含提到的按钮/组合框-用户控件。然后将KinectScrollViewer传递给ControlAdorner的构造函数,因此KinectScrollViewer是装饰元素。