1

我将画布放入一排网格布局中。画布除了画布本身的任何最大高度限制之外,也没有行高限制。它只是填充了整个用户控件。我在网格中有这个布局:

<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);
4

1 回答 1

1

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

<Canvas ClipToBounds="True" ...>
    ...
</Canvas>
于 2013-11-04T12:11:43.017 回答