我在 Visual Studio 2012 和 WPF 上遇到了最烦人的问题,我希望能得到一些帮助。我有一个带有子元素的简单网格,比如 TextBlocks,带有网格的单元格。 TextBlocks 设置为在单元格内相对定位(例如,使用 HorizontalAlignment of Left)。一切都很好,直到我敢调整网格的列或行的大小。 Visual Studio 然后插入 Margin 和 Width/Height 属性以与父/子元素的结果位置保持一致。这一切都是默默发生的,直到以后我决定进一步减小列的大小时,我才注意到它,突然间 TextBlock 被剪裁了,因为它插入了 Margin 属性。我必须检查每个子元素并手动删除这些额外的属性。在我当前的项目中,我不得不这样做近 100 次,而且我在网络上找不到任何东西来弄清楚如何告诉 Visual Studio BACK OFF 并停止采取这些窃取我正在尝试实现的漂亮格式的自由.
这是一个代码片段供引用。但这已经发生在我项目中许多不同的网格实例上。
<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>
...在调整第 0 列的大小之后:
<TextBlock Grid.Row="0" Grid.Column="0" Text="Subtotal:" HorizontalAlignment="Right" VerticalAlignment="Center" Height="16" Margin="0,7" Width="47" />
当然,还有其他人遇到过这个问题。请帮忙!
谢谢
最佳答案
对于 XAML 设计器中奇怪的自动行为,您无能为力。通俗地说,您通常最好使用 XAML 文本编辑器而不是设计器来编辑您的 xaml。
幸运的是,在您的特殊情况下有一个解决方案。行为取决于您用鼠标实际抓取列的位置:
如果您在顶部捕获它,它将设置新的边距。
如果您在下方(在线)捕获它,它将不会设置/更改边距。
更新:此功能在 VS 2012 中不再存在。
您现在可以使用 Ctrl 和/或 Shift 键更改列调整大小的行为。但是这些行为都不会产生您所追求的结果。
如果网格中的所有项目都没有 Width
和一个 Margin
设置,最好的办法是在没有任何修饰键的情况下调整列的大小(在 VS2012 中它不应该在视觉上破坏布局,它应该只添加不必要的 Margin
、 Height
和 Width
属性),然后在文档大纲中窗口多选所有元素,然后在“属性” View 中单击“设置为自动”按钮。这将删除不必要的属性。
关于wpf - 如何阻止 WPF Grid 在子元素上自动插入边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12822177/