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