我有一个wpf窗口,其中有一个带有两个视口的stackpanel - 每个视口中都有一个文本块。
<Grid>
<StackPanel VerticalAlignment="Center" Orientation="Vertical" >
<Viewbox Margin="100,0,100,0">
<TextBlock x:Name="headerText" Text="Lorem ipsum dolor" Foreground="Black"/>
</Viewbox>
<Viewbox Margin="150,0,150,0">
<TextBlock x:Name="subHeaderText" Text="Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, " TextWrapping="Wrap" Foreground="Gray" />
</Viewbox>
</StackPanel>
</Grid>
我想要实现的是顶部文本块是带有更大文本的标题。第二个文本块是具有较小文本的子标题。无论标题或子标题有多少文本,字体都应该动态变小/变大。我的问题是我希望副标题是固定宽度。这意味着,字体应该是标题的百分比(70%)并换行到多行,具体取决于我有多少文本。我附上了我到目前为止的代码......我错过了那个副标题,无法弄清楚是什么。干杯
修改 基本上我想要实现的是子标题包装文本所以它可以向下扩展它,字体是标题的70% - 无论字体有多大。
答案 0 :(得分:68)
嵌套stackpanel将导致文本框正确包装:
<Viewbox Margin="120,0,120,0">
<StackPanel Orientation="Vertical" Width="400">
<TextBlock x:Name="subHeaderText"
FontSize="20"
TextWrapping="Wrap"
Foreground="Black"
Text="Lorem ipsum dolor, lorem isum dolor,Lorem ipsum dolor sit amet, lorem ipsum dolor sit amet " />
</StackPanel>
</Viewbox>
答案 1 :(得分:31)
使用TextWrapping
元素的属性TextBlock
:
<TextBlock Text="StackOverflow Forum"
Width="100"
TextWrapping="WrapWithOverflow"/>
答案 2 :(得分:8)
使用换行符:
<TextBlock>
<Run Text="Line1"/>
<LineBreak/>
<Run Text="Line2" FontStyle="Italic" FontSize="9"/>
<LineBreak/>
<Run Text="Line3"/>
</TextBlock>
谢谢
RDV
答案 3 :(得分:3)
这可以解决问题。没有ActualFontSize属性,但有一个ActualHeight,它与FontSize有关。现在这只是原始渲染的尺寸。我无法弄清楚如何将Converter注册为resize事件。实际上可能需要将FontSize注册为resize事件。请不要标记为我的答案不完整。我无法将代码示例放在评论中。
<Window.Resources>
<local:WidthConverter x:Key="widthConverter"/>
</Window.Resources>
<Grid>
<Grid>
<StackPanel VerticalAlignment="Center" Orientation="Vertical" >
<Viewbox Margin="100,0,100,0">
<TextBlock x:Name="headerText" Text="Lorem ipsum dolor" Foreground="Black"/>
</Viewbox>
<TextBlock Margin="150,0,150,0" FontSize="{Binding ElementName=headerText, Path=ActualHeight, Converter={StaticResource widthConverter}}" x:Name="subHeaderText" Text="Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, " TextWrapping="Wrap" Foreground="Gray" />
</StackPanel>
</Grid>
</Grid>
<强>转换器强>
[ValueConversion(typeof(double), typeof(double))]
public class WidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double width = (double)value*.7;
return width; // columnsCount;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
答案 4 :(得分:2)
如果您只想让标题字体比其他字体大一点,可以使用ScaleTransform。所以你不依赖于真正的字体大小。
<TextBlock x:Name="headerText" Text="Lorem ipsum dolor">
<TextBlock.LayoutTransform>
<ScaleTransform ScaleX="1.1" ScaleY="1.1" />
</TextBlock.LayoutTransform>
</TextBlock>