0

请看更新

我有以下 WPF 控件。

<Grid>
    <Label Content="Report Generator" Margin="0,0,0,294"/>
    <TextBox Name="FilePath" Width="300" Height="25" Margin="10,30,207,264"/>
    <Button Width="75" Click="Browse" Margin="335,30,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Height="25" Content="Browse" />
    <Button Width="75" Height="25" Click="Extract" Margin="432,30,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Content="Extract" />
    <ProgressBar x:Name="ExtractBar" Margin="10,70,107,204"/>
    <Label x:Name="FirstEntityCount" Content="Number of Type1 Entities: " Margin="0,191,0,98" />
    <Label x:Name="SecondEntityCount" Content="Number of Type2 Entities: " Margin="0,226,0,65" />
</Grid>

我在 Visual Studio 2012 设计器中快速将其组合在一起。目标框架是 .Net 4.5,这是一个 WPF 窗口。它是对现有解决方案的补充。

问题是,如果我不删除第 3 和第 4 个边距(例如 Margin="a,b,c,d",将 c 和 d 设置为 0),然后指定VerticalAlignment="Top"HorizontalAlignment="Left"裁剪控件。

请参阅下面的附图。缺少控件的部分

我可以通过将边距设置为 0 并设置对齐来纠正此问题,但我想知道为什么默认情况下会发生这种情况?我真的只是拖放。这些控件在 Visual Studio 2012 中显示正常。

运行 Windows 8 RTM。

更新

我的问题不是为什么现在边距有效,为什么以前没有(我知道它们似乎已设置,因此它们裁剪了实际控制本身);我只是在问为什么这个复杂的 IDE 把它弄得一团糟……它发生在 2 次重建中……据我记得,它也发生在 Expression Blend 中。我会仔细检查。

4

2 回答 2

2

当您从设计器拖放时,无论是在 Visual Studio 还是 Expression blend 中,设计器都会尝试将元素放置在控件在设计器图面上放置的确切位置。当设计者放置元素时,边距用于相对于包含元素定位控件。

将控件拖到设计图面上时通常会重置边距。在 Blend 和 VS 中,您可以通过单击属性中的小方块并选择重置来将任何属性重置为其默认设置。

同意设计师设置的边距有点烦人;但是,不确定在使用视觉设计器进行拖放时如何处理。

就个人而言,我倾向于在手写 XAML 和设计器之间切换;最近,我更多地使用 Blend,因为它可以通过使用对象和时间线面板来控制 XAML 中几乎任何元素的位置。

顺便说一句,要清理 Blend XAML 的疯狂,请为 Visual Studio 安装XAML Styler扩展。

于 2012-11-11T18:04:54.717 回答
1

通过设置顶部和底部的边距,您可以强制标签具有特定的高度。碰巧这个高度不足以显示您在标签中放置的文本的高度。我认为如果你稍微减少下边距,你会发现它很合适。

在不相关的说明中,使用 Grid.Row 和 Grid.Column 将控件放置在此 Grid 上而不是在技术上将它们全部放在 (0,0) 位置然后使用边距来定位它们不是更好吗?

于 2012-11-09T10:22:07.343 回答