1

キャンバスをグリッド レイアウトの行に配置します。キャンバスは、キャンバス自体の 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);
4

1 に答える 1

1

デフォルトでは、Canvas はその子要素のコンテンツを境界にクリップしません。ClipToBoundsプロパティをtrue次のように設定する必要があります。

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