为什么WPF边距裁剪控件?

时间:2012-11-09 10:06:53

标签: wpf wpf-controls visual-studio-2012

请参阅更新

我有以下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"和{{ 1}}裁剪控件。

参见下图。Missing parts of controls

我可以通过将边距设置为0并设置对齐来解决这个问题,但我想知道为什么会出现这种情况?我确实只是拖了下来。控件在Visual Studio 2012中显示为正常。

运行Windows 8 RTM。

更新

我的问题不是为什么边缘现在可以工作以及为什么之前没有(我得到它们似乎已经设置好所以他们自己裁剪实际控件);我只是在问为什么这个复杂的IDE会把它弄得一团糟......这发生在2次重建...... 从我记忆中,它也发生在Expression Blend中。我会仔细检查。

2 个答案:

答案 0 :(得分:2)

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

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

同意设计师设置边距有点烦人;但是,当使用可视化设计器进行拖放时,并不确定如何处理这个问题。

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

另外,为了清除Blend XAML的疯狂,请为Visual Studio安装XAML Styler扩展名。

答案 1 :(得分:1)

通过设置顶部和底部的边距,您将强制标签具有特定高度。碰巧这个高度不足以显示您放入标签的文本的高度。我想如果你稍微降低底部边距,你会觉得它很合适。

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