因此,我在这里研究的大部分Q& A都涉及在缩放时保持纵横比,但我正在尝试实现缩放,同时调整纵横比以保持水平填充。这可能更容易用图像来解释,所以让我们说这是原始的:
现在,有了这个当前的布局,每当我调整最外层容器的大小时,Viewbox都会缩放内部的所有内容(Uniform stretch),同时保持纵横比,所以如果我将容器垂直收缩,我最终会在侧面留下一些空白:
在上述情况下我想要的是内容宽度首先水平拉伸,然后根据需要缩放垂直内容大小(例如字体大小,元素高度等),以便所有内容继续是可见的。
如果最外面的容器有一个水平调整大小,我想要同样的行为 - 网格应该水平缩放(从而增加元素宽度)。这很难看,因为屏幕截图本身是水平调整大小的,但这个屏幕截图最初比其他屏幕更宽:
现在,我一直在试验Viewbox上的各种Stretch,HorizontalAlignment和VerticalAlignment设置,并且最接近我想要的是:
<Viewbox HorizontalAlignment="Stretch" VerticalAlignment="Top" Stretch="Fill">
<MyUserControl />
</Viewbox>
这给了我所需的“填充”类型的布局,但问题显然是它垂直扭曲内容,所以如果我垂直收缩容器,我最终会压扁文本而不是简单调整的字体大小
鉴于我对Viewbox如何工作的理解,我对此并不感到惊讶,所以我猜我需要反而挂钩Viewbox的SizeChanged事件并使用它来调整MyUserControl的高度(让它逐渐渗透到网格)。
这个特别的答案看起来很有希望: Making a Viewbox scale vertically but stretch horizontally
...但最高投票的答案似乎让内容排名很奇怪。如果我将容器缩小超过某一点,内容/用户控件将跳到右侧并开始离开屏幕。