我正在编写一个侧面滚动的文本阅读器小部件,类似于您在iPhone应用程序商店中获得的内容,其中应用程序的屏幕截图面板是嵌入在主垂直滚动面板中的这种不同的水平滚动面板.
在所有版本(包括全分辨率键盘/鼠标计算机样式)中,面板占据容器宽度的100%,因此它就像横跨页面的水平条纹.
在小型分辨率的触摸界面版本中,即智能手机,我希望它也可以调整为窗口的整个高度,这样当你垂直滚动它时,它可以占据整个屏幕.
iPhone使这一点变得棘手,因为$(window).height()或者你想要查询它似乎取决于URL栏是否可见.
没有特殊的代码来知道它是否在iPhone上,或者添加黑客来滚动窗口以关闭URL栏然后查询高度,有没有办法向Safari移动设备询问"窗口高度是多少"无论URL栏目前是否可见,我的3GS都会得到416的答案?
对于所有主要的智能手机,我想找到一种平台中立的方式,"我可以将此面板设置为什么高度,以便当您滚动到它时,它会填满整个浏览器窗口?"
谢谢,我已经打了一会儿反对这个,已经在这里挖了一下,找不到这个具体的信息.
我在WPF中处理子类化Panel并实现自己的布局工作,并在availableSize arg中传递给MeasureOverride的维度获得Infinity或PositiveInfinity时,我发现了一些其他问题.回答通常是,"这意味着你可以占用尽可能多的空间:忽略它,加上你所有孩子所需的大小,并将其归还."
在我的情况下,我正在制作一个动态调整大小以填充可用空间的控件,因此没有所需大小的内在概念.它只是想使用整个availableSize.
当我构建ControlTemplate时,它最终嵌套在StackPanel中,并且它开始获得Infinity的可用高度,即使控件没有滚动条.如果我只是将它限制在某个固定的数字上,它就会在窗口上剪辑.我尝试返回ActualHeight,但这不起作用,因为它是循环的:在我完成完整布局传递之前没有ActualHeight.所以这总是0.0.
起初我不知道是StackPanel传递无限并且通过参考源挖了一段时间无济于事,最后通过使用VisualTreeHelper来运行父母并查看他们的ActualHeight并且StackPanel是最深的一个非零高度.我把它改成了DockPanel,因为我只需要两个控件,所以它和StackPanel一样.不料,DockPanel没有通过Infinity的可用高度.
但这只是一种解决方法; 我想更深入地了解布局背后的原理以及为什么没有滚动条的标准容器会告诉我我可以拥有所需的空间.什么是"正确"的回应?