2012-09-03 86 views
0

我有一個名爲Canvas和mainCanvas我在編程的WPF的StackPanel AUTOSIZE

爲了增加一個ScrollViewerStackPanel它... mainCanvas

......滾動視圖

......... PNL

............(更多堆疊控制)

我試圖讓我的聖ackPanel將自動調整爲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中已經存在與設置:

WIDTH = 「自動」

高度= 「自動」

的Horizo​​ntalAlignment = 「拉伸」

VerticalAlignment = 「拉伸」

我可以把事情通過pnl.Height = 500;這讓我看到滾動條不工作,如果半工作Stackpanel高度受到限制。但這只是手動將高度調整爲全屏尺寸,因此在調整應用程序大小時不會自動調整大小。

我希望設置pnl.Height = Double.NaN;自動和V/H調整Stretch將工作,但StackPanel仍然重疊所有控件的最大尺寸。

任何人都可以指向正確的方向,讓我的StackPanel適合父mainCanvas和autosize當我調整父母和/或主應用程序窗口滾動?

謝謝

回答

2

我相信畫布是絕對定位只。使用Grid作爲你的面板可能會給你想要的結果。

+0

好像畫布是問題。使用網格來解決它。謝謝 – user3357963

2

StackPanel不會拉伸,以填補其容器,因爲你注意到。但是你可以約束其MinWidthMinHeight屬性,將其容器的寬度/高度。

// 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); 
+0

小肥羊的建議已經解決了這個問題對我來說,但我也有興趣在你的答案 - 謝謝。該行'VAR結合=新的Binding(); - (?)'是給我的錯誤「System.Windows.Forms.Binding」不包含一個構造函數參數0應該怎樣我把新的結合 – user3357963

+0

內容@ ooo我的意思是一個不同的'Binding'類 - 應該是* System.Windows.Data.Binding * – McGarnagle