Canvas超越了它的网格行限制

时间:2013-11-04 08:34:13

标签: c# wpf xaml

我将画布放入网格布局的一行中。除了画布本身的任何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);

1 个答案:

答案 0 :(得分:1)

默认情况下,Canvas不会将其子元素的内容剪切为其边界。您需要将ClipToBounds属性设置为true

<Canvas ClipToBounds="True" ...>
    ...
</Canvas>