0

我有一个Canvas名为 mainCanvas 并且我以编程方式将 aScrollViewer和 a添加StackPanel到它的顺序

...主画布

......滚动视图

.........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 不适合父级并且不会自动调整大小。

mainCanvasXAML 中已存在设置:

宽度=“自动”

高度=“自动”

Horizo​​ntalAlignment = "拉伸"

VerticalAlignment = "拉伸"

pnl.Height = 500;如果 Stackpanel 高度受到限制,我可以通过使用它来显示滚动条确实可以工作。但这只是手动将高度调整为全屏大小,因此在调整应用程序大小时不会自动调整大小。

我希望设置pnl.Height = Double.NaN;为自动和 V/H 调整到 Stretch 会起作用,但 StackPanel 仍然会将所有控件重叠到它的最大尺寸。

当我通过滚动调整父级和/或主应用程序窗口的大小时,谁能指出我正确的方向以使我的 StackPanel 适合父级 mainCanvas 并自动调整大小?

谢谢

4

2 回答 2

2

我相信 Canvas 仅用于绝对定位。使用 Grid 作为您的面板可能会给您想要的结果。

于 2012-09-03T22:34:37.200 回答
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);
于 2012-09-03T22:50:20.817 回答