如何阻止 WPF Grid 自动在子元素上插入边距

BCA*_*BCA 5 wpf grid margin visual-studio-2012

我在 Visual Studio 2012 和 WPF 方面遇到了最烦人的问题,我希望得到一些帮助。我有一个带有子元素的简单网格,例如带有网格单元格的 TextBlocks。文本块被设置为在单元格内相对定位(例如,使用左侧的水平对齐)。一切都很好,直到我敢于调整网格的列或行的大小。然后,Visual Studio 插入边距和宽度/高度属性,以与父/子元素的结果位置保持一致。这一切都悄无声息地发生,直到后来我决定进一步减小列的大小时我才注意到,突然 TextBlock 由于插入了其 Margin 属性而被剪裁。我必须检查每个子元素并手动删除这些额外的属性。我必须在当前的项目中执行此操作近 100 次,而且我无法在网络上找到任何内容来了解​​如何告诉 Visual Studio 后退并停止采取这些窃取我想要实现的良好格式的自由行为。这是一个代码片段供参考。但我的项目中许多不同的网格实例都发生过这种情况。

<Grid  Canvas.Left="435" Canvas.Top="138" Height="61" Width="192">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="11*"/>
        <ColumnDefinition Width="21*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0" Grid.Column="0" Text="Subtotal:" HorizontalAlignment="Right" VerticalAlignment="Center"  />
</Grid>
Run Code Online (Sandbox Code Playgroud)

...调整第 0 列的大小后:

<TextBlock Grid.Row="0" Grid.Column="0" Text="Subtotal:" HorizontalAlignment="Right" VerticalAlignment="Center" Height="16" Margin="0,7" Width="47"  />
Run Code Online (Sandbox Code Playgroud)

当然还有其他人遇到过这个问题。请帮忙!

谢谢

bit*_*onk 4

对于 XAML 设计器中奇怪的自动行为,您无能为力。一般来说,您通常最好使用 XAML 文本编辑器而不是设计器来编辑您的 xaml。

幸运的是,针对您的特殊情况,有一个解决方案。行为取决于您使用鼠标实际抓取列的位置:

如果你抓住它的顶部,它会设置新的边距。 抓住顶部

如果您在下方(在线处)抓住它,它将不会设置/更改边距。 抓住底部

更新:VS 2012 中不再存在此功能。

Ctrl您现在可以使用和/或键更改列调整大小的行为Shift。但这些行为都不会产生您所追求的结果。

如果网格中的所有项目都没有 aWidth和 aMargin集,最好的选择是调整列的大小而不使用任何修饰键(在 VS2012 中,它不应该在视觉上破坏布局,它应该只添加不必要的Margin,HeightWidth属性)和然后在“文档大纲”窗口中多选所有元素,并在“属性”视图中单击“设置为自动”按钮。这将删除不必要的属性。

设置为自动