因此,我希望它读取其内容的所需高度,仅根据高度计算缩放比例,然后允许缩放后的内容水平拉伸.是否可以使用Viewbox和/或某些第三方面板来完成此操作?解决方案 WPF不包含此类控件,但是您可以自己编写,而不会遇到太多麻烦.这是一个具有您要求的自定义ViewboxPanel:public class ViewboxPanel : Panel{ private double scale; protected override Size MeasureOverride(Size availableSize) { double height = 0; Size unlimitedSize = new Size(double.PositiveInfinity, double.PositiveInfinity); foreach (UIElement child in Children) { child.Measure(unlimitedSize); height += child.DesiredSize.Height; } scale = availableSize.Height / height; return availableSize; } protected override Size ArrangeOverride(Size finalSize) { Transform scaleTransform = new ScaleTransform(scale, scale); double height = 0; foreach (UIElement child in Children) { child.RenderTransform = scaleTransform; child.Arrange(new Rect(new Point(0, scale * height), new Size(finalSize.Width / scale, child.DesiredSize.Height))); height += child.DesiredSize.Height; } return finalSize; }},您可以这样使用它:<local:ViewboxPanel> <Button>Foo</Button> <Button>Bar</Button></local:ViewboxPanel>它肯定需要一些工作,但这可能会让您入门.I want to make a Viewbox (or something similar) that scales only its height, and then stretches its content horizontally.If I do this:<Viewbox> <StackPanel> <Button>Foo</Button> <Button>Bar</Button> </StackPanel></Viewbox>then I get this:It acts as if both of the buttons had HorizontalAlignment="Center", and then scales the result. But I don't want HorizontalAlignment="Center"; I want HorizontalAlignment="Stretch", like this:So I want it to read its contents' desired height, calculate a scaling factor based only on the height, and then allow the scaled content to stretch horizontally.Is there any way to accomplish this using the Viewbox, and/or some third-party panel? 解决方案 There is no such control include with WPF but you can write one yourself without too much trouble. Here is a custom ViewboxPanel that has your specifications:public class ViewboxPanel : Panel{ private double scale; protected override Size MeasureOverride(Size availableSize) { double height = 0; Size unlimitedSize = new Size(double.PositiveInfinity, double.PositiveInfinity); foreach (UIElement child in Children) { child.Measure(unlimitedSize); height += child.DesiredSize.Height; } scale = availableSize.Height / height; return availableSize; } protected override Size ArrangeOverride(Size finalSize) { Transform scaleTransform = new ScaleTransform(scale, scale); double height = 0; foreach (UIElement child in Children) { child.RenderTransform = scaleTransform; child.Arrange(new Rect(new Point(0, scale * height), new Size(finalSize.Width / scale, child.DesiredSize.Height))); height += child.DesiredSize.Height; } return finalSize; }}and you use it like this:<local:ViewboxPanel> <Button>Foo</Button> <Button>Bar</Button></local:ViewboxPanel>It definitely needs some work but this might get you started. 这篇关于使Viewbox垂直缩放但水平拉伸的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-23 11:18