【发布时间】:2012-07-19 17:21:49
【问题描述】:
我正在创建一个 Windows 8 Metro 应用程序。我在ScrollViewer 中有一个TextBlock。我想知道是否可以以编程方式更改 ScrollViewer 的 ZoomFactor 以使 TextBlock 自动适应屏幕的宽度。意思是,TextBlock 的最长行适合屏幕宽度(不换行)。
【问题讨论】:
标签: c# .net xaml microsoft-metro
我正在创建一个 Windows 8 Metro 应用程序。我在ScrollViewer 中有一个TextBlock。我想知道是否可以以编程方式更改 ScrollViewer 的 ZoomFactor 以使 TextBlock 自动适应屏幕的宽度。意思是,TextBlock 的最长行适合屏幕宽度(不换行)。
【问题讨论】:
标签: c# .net xaml microsoft-metro
通常,我发现 ViewBox 是缩放 xaml 内容以适应预定大小的最有用的方法。只需让您的 ScrollViewer 和 TextBlock 没有尺寸要求(并关闭换行),然后将 ScrollViewer 放在 Scale=Uniform (或根据您的需要可能是 UniformToFit)的 ViewBox 中。
TextBlock 将使 ScrollViewer 的大小适合其内容,然后 ViewBox 将缩放 ScrollViewer 以完全适合其自己的控制范围。 (将 ViewBox 放在根网格内或作为页面的根控件应该会导致它填满整个屏幕。)
【讨论】:
ScrollViewer -> Viewbox -> TextBlock。但是,由于用户能够更改 ScrollViewer 的 ZoomFactor(通过 Ctrl+Scroll 或 Ctrl+),我想在更改 TextBlock 的内容时重新缩放 TextBlock 的内容.我该怎么做?
ScrollViewer -> Viewbox -> TextBlock 不能满足我的需要。正如你所建议的,我使用了Viewbox -> ScrollViewer -> TextBlock,但它有问题。滚动条不显示,我不能用鼠标滚动。我正在使用Stretch="UniformToFill"
ScrollViewer 也支持缩放,您不应尝试实现自己的缩放。或者,如果您不希望这种行为,您可以禁用滚动查看器的缩放。至于ScrollViewer不滚动,一般我发现这个问题是因为ScrollViewer(或它里面的Viewbox)实际上比屏幕大。设置一些断点并检查Viewbox 的实际高度/宽度。有时我将控件包装在 Border 中,以便更轻松地查看其大小。
ViewBox控件改变ScrollViewer的大小;因此禁用它显示滚动条(只要内容大于内容,它就会显示滚动条)。我想要的是更改TextBlock 的字体大小以自动适应屏幕宽度。