0

Canvas名前付きのmainCanvasがあり、プログラムで aScrollViewerと aStackPanelを順番に追加しています

...mainCanvas

……スクロールビュー

.........pnl

.......... (より積み重ねられたコントロール)

StackPanel を mainCanvas サイズに自動サイズ変更し、大きすぎる場合はスクロールできるようにしようとしています。これまでのコードは以下のとおりです

mainCanvas.Children.Clear();

// Create the container
ScrollViewer scrollView = new ScrollViewer();
scrollView.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
scrollView.CanContentScroll = true;
scrollView.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
scrollView.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;

StackPanel pnl = new StackPanel();
//pnl.Height = 500; //Works and allows scrolling but doesn't resize
pnl.Height = Double.NaN; //(Double.NaN is Auto) Doesn't Work - StackPanel overflows parent window

pnl.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
pnl.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;


scrollView.Content = pnl;

// Add the ScrollView and StackPanel to Parent Window
mainCanvas.Children.Add(scrollView);

残念ながら、StackPanel は親に適合せず、自動サイズ調整されません。

mainCanvas設定で XAML に既に存在します:

幅=「自動」

高さ=「自動」

Horizo​​ntalAlignment = "ストレッチ"

VerticalAlignment = "ストレッチ"

pnl.Height = 500;Stackpanel の高さが制限されている場合にスクロールバーが機能することを示すものを使用して、物事を半機能させることができます。ただし、これは高さを全画面サイズに合わせて手動で調整しているだけなので、アプリのサイズを変更するときに自動サイズ変更されません。

自動に設定pnl.Height = Double.NaN;し、ストレッチへの V/H 調整が機能することを望みましたが、StackPanel はすべてのコントロールを最大サイズまでオーバーラップさせます。

親および/またはメインアプリウィンドウのサイズをスクロールして変更するときに、StackPanelを親mainCanvasに合わせて自動サイズ調整するために、誰かが私を正しい方向に向けることができますか?

ありがとうございました

4

2 に答える 2

2

お気づきのStackPanelように、コンテナを埋めるために伸びません。MinWidthただし、そのプロパティとMinHeightプロパティをコンテナの幅/高さにバインドできます。

// give the canvas a name, so you can bind to it
mainCanvas.Name = "canvas";

// create the binding for the Canvas's "ActualHeight" property
var binding = new System.Windows.Data.Binding();
binding.ElementName = "canvas";
binding.Path = new PropertyPath("ActualHeight");

// assign the binding to the StackPanel's "MinHeight" dependency property
sp.SetBinding(StackPanel.MinHeightProperty, binding);
于 2012-09-03T22:50:20.817 に答える
2

Canvas は絶対配置専用だと思います。代わりにグリッドをパネルとして使用すると、おそらく望ましい結果が得られます。

于 2012-09-03T22:34:37.200 に答える