C# 为什么在调整网格大小时边框停止渲染其负边距
我用了一个带负边距的边框来标记一个网格行。但我在调整窗口大小时有一种奇怪的行为。剪切行的第二列会使边框的边距消失: 当然这是一个小例子,在主应用程序中我使用了网格拆分器,但bahaviour保持不变。是否有可能以某种方式修复此问题,或者它是WPF错误 MainWindow.xaml:C# 为什么在调整网格大小时边框停止渲染其负边距,c#,wpf,xaml,grid,border,C#,Wpf,Xaml,Grid,Border,我用了一个带负边距的边框来标记一个网格行。但我在调整窗口大小时有一种奇怪的行为。剪切行的第二列会使边框的边距消失: 当然这是一个小例子,在主应用程序中我使用了网格拆分器,但bahaviour保持不变。是否有可能以某种方式修复此问题,或者它是WPF错误 MainWindow.xaml: <Window x:Class="TestHighlightBorder.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xam
<Window x:Class="TestHighlightBorder.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestHighlightBorder"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid Margin="100,0,0,0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Border Background="DarkRed" Opacity="0.3" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Margin="-80,0,0,0" Panel.ZIndex="1" />
<TextBlock Text="column 0" Background="LightBlue" Grid.Row="0" Grid.Column="0" />
<TextBlock Text="column 2" Background="LightGreen" Grid.Row="0" Grid.Column="2" />
</Grid>
附言:
这就是主应用程序的外观。这是一种不动产网格。负边距的大小取决于嵌套对象的级别。
不必在网格中添加100个左边距,只需在开头固定一列,宽度为100,将边框的列跨度设置为4,将负边距替换为20个正左边距(100-80=20),并为每个控件的
grid.column
的值添加1即可。所以最后的方法是这样的:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="200" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Border Background="DarkRed" Opacity="0.3" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4" Margin="20,0,0,0" Panel.ZIndex="1" />
<TextBlock Text="column 0" Background="LightBlue" Grid.Row="0" Grid.Column="1" />
<TextBlock Text="column 2" Background="LightGreen" Grid.Row="0" Grid.Column="3" />
</Grid>
我试过你的例子,结果正如你所说:第2列消失了,空白消失了。
每当网格无法完全显示时,就会出现这种情况。
例如,如果将第三列定义设置为200,则当第2列未完整显示时,边距将立即消失。从底部调整窗口大小时也会发生同样的情况 如果将现有网格放在另一个容器(网格、StackPanel等)中,并将MinWidth设置为至少等于列宽度+边距的大小(在示例310中),则不会发生这种情况 像这样:
<StackPanel MinWidth="310">
<Grid Margin="100,0,0,0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Border Background="DarkRed" Opacity="0.3" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Margin="-80,0,0,0" Panel.ZIndex="1" />
<TextBlock Text="column 0" Background="LightBlue" Grid.Row="0" Grid.Column="0" />
<TextBlock Text="column 2" Background="LightGreen" Grid.Row="0" Grid.Column="2" />
</Grid>
</StackPanel>
为什么不从边框中删除负边距,并在文本块前面使用正边距呢?作为一种修复方法,我假设删除边距,只需在网格中添加两列(20和80),并将边框从第二列开始就可以了。但是出于兴趣,您能测试一下如果给边框一个ColumnSpan
的2
,会发生什么情况吗?在主应用程序中,我使用了多个嵌套行,它们是动态生成的,因此边距也变了。tl;博士,我需要底片边缘