我将画布放入网格布局的一行中。除了画布本身的任何maxhight限制之外,画布都没有行高限制。它只是填充整个用户控件。 我在网格中有这个布局:
<DockPanel Grid.Row="1" MaxHeight="32">
<StackPanel DockPanel.Dock="Right">...</StackPanel>
<Grid DockPanel.Dock="Left" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition MaxHeight="12" Height="12" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Canvas Grid.Row="0" VerticalAlignment="Stretch" SizeChanged="canvasBar_SizeChanged" Loaded="Canvas_Loaded">
...
</Canvas>
<Image Grid.Row="1">...</Image>
</Grid>
</DockPanel>
如果我放置另一个图像而不是画布,它不会填满整个用户控件,但画布会填充它。我在这里缺少任何参数吗?
编辑: SizeChanged和Loaded都触发此函数绘制矩形:
Rectangle r = new Rectangle();
r.Height = canvasBar.ActualHeight;
r.Width = Rectwidth;
r.RadiusX = 1;
r.RadiusY = 1;
r.Margin = new Thickness(RecOffset, 0, 0, 0);
RecOffset += RectWidth + RectLimiterWidth;
r.Stroke = new SolidColorBrush(Color.FromRgb(0, 0, 0));
r.StrokeThickness = 1;
r.Fill = new SolidColorBrush(LastBrcColor);
canvasBar.Children.Add(r);
答案 0 :(得分:1)
默认情况下,Canvas不会将其子元素的内容剪切为其边界。您需要将ClipToBounds
属性设置为true
:
<Canvas ClipToBounds="True" ...>
...
</Canvas>