当拖动元素时,UWP应用程序布局会出错

当拖动元素时,UWP应用程序布局会出错,uwp,uwp-xaml,windows-applications,windows-10-mobile,Uwp,Uwp Xaml,Windows Applications,Windows 10 Mobile,自从我开始UWP以来,我一直面临着这个奇怪的问题。每当我使用XAML定位我的元素时(在中间或左上右对齐,基本上只使用代码),无论我在什么设备上运行应用程序,我的手机或我的电脑(都是Win10),元素的定位都完全如设计视图所示 然而,当我在设备上部署应用程序时,如果我将元素拖到画布上我想要的某个地方,布局就会完全混乱。有时会导致某些元素离开视口 长话短说,当我在部署应用程序时拖放元素时,它们不是我在VS中设置它们的方式。但是当我使用代码(XAML)定位它们时,它们就很好了 如何解决这个问题,使拖放

自从我开始UWP以来,我一直面临着这个奇怪的问题。每当我使用XAML定位我的元素时(在中间或左上右对齐,基本上只使用代码),无论我在什么设备上运行应用程序,我的手机或我的电脑(都是Win10),元素的定位都完全如设计视图所示

然而,当我在设备上部署应用程序时,如果我将元素拖到画布上我想要的某个地方,布局就会完全混乱。有时会导致某些元素离开视口

长话短说,当我在部署应用程序时拖放元素时,它们不是我在VS中设置它们的方式。但是当我使用代码(XAML)定位它们时,它们就很好了


如何解决这个问题,使拖放元素不会破坏我的应用程序布局?

我会直截了当地说,我会尽量保持简短。 您面临的问题是关于自适应布局的
。让我们深入探讨一下

目前发生的情况:
  • 当您从VisualStudio的
    工具箱中拖放元素时,VisualStudio会为您快速编写
    XAML
  • 设计师有一个可查看的配置,例如:
    5”手机1920x1080 300%缩放
    或一些桌面版本,例如:
    23”桌面1920x1080 100%缩放
    。这会告诉VisualStudio您在设计时首选的屏幕大小。您也可以对其进行更改(创建设计后始终进行更改)。如果你设计一个屏幕大小,然后换成另一个,你就会知道出了什么问题
  • 拖放时,VisualStudio会编写一个与屏幕大小对应的XAML。因此,如果您在
    23”
    上进行设计,并将
    UI元素
    toolbox
    拖放到屏幕中央,您的
    Margin
    看起来像
    Margin=“909505,0,0”
  • 这些页边距分别对应于桌面大小,并且是硬编码的,因此它们不会随着屏幕大小的变化而变化(非自适应)
  • 现在切换到
    5”
    designer屏幕,您会注意到您的UI元素已消失。嗯,不是消失了,只是搬走了 为什么元素消失了? 之所以这样做,是因为
    边距
    硬编码为
    Margin=“909505,0,0”
    。在5英寸的屏幕上,宽度大约为400px左右,高度为600px或更高。因此,909的
    左边距将永远将其从屏幕区域中移出,更不用说上边距了。这就是为什么运行时的UI变得一团糟的原因

    如何修复它:
  • 要修复它,您需要避免拖放,或者在进行拖放时,确保删除了默认情况下VisualStudio提供给您的边距和固定高度和宽度
  • 尝试使用更多的
    Grid.RowDefinitions
    Grid.ColumnDefinitions
  • 仅使用边距为
    元素提供更精细的放置细节

  • 代码参考: 我已经回答了一些关于自适应布局和设计的问题。它们可能适用于windows phone 8、WinRT或UWP,但请记住
    XAML
    是XAML,自适应设计是
    adaptive design
    。链接如下:

  • 。在这里,请看他问题中的XAML和答案中的XAML。同时,请仔细阅读内容,因为它提供了有关页边距和自适应设计如何工作的更深入的知识
  • :虽然最后一个问题不是因为自适应布局。但是非自适应布局让我耽搁了很长一段时间才真正抓住问题。请看其中的XAML部分

  • 希望有帮助。对于任何问题,请随意使用注释部分,长话短说,没有办法。如果您将元素放置在某个位置,Visual Studio无法知道它是否与某个元素对齐,如果您有网格,列的大小是否需要相对或绝对等。您需要检查所有这些数据并手动设置它们在代码或元素属性中。

    您应始终尝试清理代码(例如,删除不需要的边距)在您对设计器执行拖放操作之后。@JustinXL并没有真正理解您。您所说的不需要的边距是什么意思?您的设计器上到底有什么内容?对我来说,它几乎总是边距。感谢非常详细的选项…似乎需要一些时间来测试所有这些。我会尽快发回