WPFから継承するカスタムキャンバスコントロールを作成しましたCanvas
。私はメインウィンドウでこのように使用しています-
<ScrollViewer
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<RTD:RTDesignerCanvas
Margin="5"
Background="White"
x:Name="canvas1"
Focusable="True"
AllowDrop="True">
</RTD:RTDesignerCanvas>
</ScrollViewer>
すべて正常に動作しますが、このように内部のコントロールの位置を設定しようとすると
Canvas.SetTop(item, 200);
スクロールバーは表示されず、コントロールはどこかに隠されています。興味深いことに、それに別のコントロールを追加すると、スクロールバーが表示され、下にスクロールして前のコントロールを表示できます。
使ってみました
base.InvalidateVisual();
base.UpdateLayout();
base.InvalidateArrange();
アイテムを変更した後、Top
またはLeft
何も起こりません。何かが足りないのですか、それともバグが原因で発生しますか?
更新:
明確にするために、たとえば100、100のキャンバスがあるとしますwidth
。height
これを使用してコントロール(すでにキャンバスに追加されています)をCanvas.SetLeft(myControl, 200)
移動すると、デフォルトでは表示されない位置に移動し、スクロールバーも無効になります。そのコントロールを確認する方法はありません。
これで、Canvasに別のコントロールを追加すると、ScrollBarが正しく表示され、スクロールすると前のコントロールを確認できます。