TextBlock文本在放入ViewBox时不换行

问题描述 投票:11回答:2

我有一个TextBlock,其中包含要包装的一长行文本。我将TextBlock放在了一个ViewBox中,期望它的文本大小在仍换行时会发生变化,但是这似乎没有发生。 ViewBox只是调整TextBox的大小,以便所有文本都适合一行,从而使文本很小。

如何在仍然使用TextWrapping的同时使用ViewBox调整文本大小。

这是我的代码:

<Viewbox>
    <TextBlock Text="The Option text can also dynamically grow/shrink to fit more content. More text to go here....................." TextWrapping="Wrap"/>
</Viewbox>

这是Windows 8存储应用程序的一部分,因此是WinRT Xaml。

windows-store-apps winrt-xaml textblock word-wrap viewbox
2个回答
22
投票

只需在TextBlock上设置宽度。

        <Viewbox Width="500">
            <TextBlock Width="100" TextWrapping="Wrap">This is the text that's long and on two lines.</TextBlock>
        </Viewbox>
因此ViewBox将放大/缩小其全部内容。如果您不通过在TextBlock上设置宽度来限制其内容,则ViewBox将为其提供无限的扩展空间。您还可以在Grid内添加一个具有宽度和高度的根ViewBox,并在其中放置元素,然后根据ViewBox的宽度对整个批次进行缩放。

在图像中,TextBlock 100的宽度被缩放为ViewBox的宽度,即500。因此,要获得所需的包装,只需调整TextBlock的宽度,直到看起来不错为止。] >

(显然,它应该说三行,但我不只是为此而重新上传)

我遇到了同样的问题,我有很多按钮,需要使用ViewBox才能处理本地化。这样做的原因是Width设置为Infinity,因为按钮或控件的宽度由父控件确定。幸运的是,控件具有一个称为ActualWidth的属性。这个属性拥有一个渲染的宽度,我可以在绑定中使用它:

<Button> <Button.Content> <Viewbox StretchDirection="DownOnly"> <TextBlock Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Button}}" TextWrapping="Wrap" TextAlignment="Center" Text="{Binding }" /> </Viewbox> </Button.Content> </Button>

因此,文本块将获得Button按钮当前具有的宽度。如果按钮更改宽度,则会自动更新。 Textblock将根据给定的宽度进行换行,并且只有在需要时,视图框才会闪烁(假设应用StretchDirection =“ DownOnly”)。

https://docs.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.actualwidth?view=netframework-4.8


0
投票
我遇到了同样的问题,我有很多按钮,需要使用ViewBox才能处理本地化。这样做的原因是Width设置为Infinity,因为按钮或控件的宽度由父控件确定。幸运的是,控件具有一个称为ActualWidth的属性。这个属性拥有一个渲染的宽度,我可以在绑定中使用它:
© www.soinside.com 2019 - 2024. All rights reserved.