我正在Windows上开发一个应用程序,我想要一个Panel,可以对其子元素进行如下布局:
https://istack.dev59.com/fg87q.webp 在WPF Panel中,最接近的是垂直方向上的WrapPanel,其布局如下:
https://istack.dev59.com/0GJ78.webp 到目前为止,我的解决方案是创建一个继承自WrapPanel的派生类,并将它及其每个子元素旋转180度,以实现我的目标。
问题在于重写的
更新:
我重新检查了代码,并意识到我在其他地方更改了RenderTransform,这阻止了它的工作。因此,我的问题已经解决了。但是,如果您有更加简洁的解决方案,例如使用
https://istack.dev59.com/fg87q.webp 在WPF Panel中,最接近的是垂直方向上的WrapPanel,其布局如下:
https://istack.dev59.com/0GJ78.webp 到目前为止,我的解决方案是创建一个继承自WrapPanel的派生类,并将它及其每个子元素旋转180度,以实现我的目标。
public class NotificationWrapPanel : WrapPanel
{
public NotificationWrapPanel()
{
this.Orientation = Orientation.Vertical;
this.RenderTransformOrigin = new Point(.5, .5);
this.RenderTransform = new RotateTransform(180);
}
protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
{
var addedChild = visualAdded as UIElement;
if (addedChild != null)
{
addedChild.RenderTransformOrigin = new Point(.5, .5);
addedChild.RenderTransform = new RotateTransform(180);
}
base.OnVisualChildrenChanged(addedChild, visualRemoved);
}
}
问题在于重写的
OnVisualChildrenChanged
中的addedChild.RenderTransform = new RotateTransform(180)
部分似乎没有起作用。欢迎提供任何解决方案(即使与我的方法无关)。更新:
我重新检查了代码,并意识到我在其他地方更改了RenderTransform,这阻止了它的工作。因此,我的问题已经解决了。但是,如果您有更加简洁的解决方案,例如使用
MeasureOverride
/ArrangeOverride
,我会很感激。
MeasureOverride
和ArrangeOverride
方法(这也许是可行的甚至是建议的),但要做到这一点,您必须更具体地了解您的需求。例如,如果只有8个项目,哪个“瓷砖”是空的?并且所有瓷砖的大小都相同吗? - Grx70