我试图将一个textBlock控件放在屏幕的底部(在它下面有一个小边距),我也希望为它设置一个背景,这样无论textBlock后面显示什么,它很容易阅读。
在Android上,你可以简单地设置它的背景,并告诉它宽度和高度为WRAP_CONTENT,这样它只需要它所需的空间,但是我找不到类似的东西在WP8上。
这是我创建的xaml:
...
<Grid >
<Image x:Name="fullScreenImage" Stretch="Fill"
Visibility="Collapsed" />
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom"
Margin="0,0,0,200" FontSize="40" x:Name="pictureLabel" TextWrapping="Wrap"
Foreground="#ff000000" />
</Grid>
由于textBlock没有背景属性,我不得不使用包装它的东西。但是,由于其内容会动态变化,因此我无法为其设置大小。
目前,我想简单设置背景颜色。
如果可以使用圆角矩形作为背景或9补丁图像,我也非常感激。
如何设置textBlock的背景?
答案 0 :(得分:3)
解决方案非常简单。只需将HirizontalAlignment设置为Left。希望这适用于你的情况。
<StackPanel HorizontalAlignment="Left">
<Border Background="#66FFFFFF">
<TextBlock/>
</Border>
</StackPanel>
答案 1 :(得分:0)
根据this question(适用于Silverlight - 但仍然是xaml),无法明确设置TextBlock
的背景颜色。您最好的选择是将TextBlock
包裹在Grid
或Border
。
如果Grid
不起作用,this article建议Border
可以解决问题:
一个简单的边框可以做,而不是设置它的宽度和高度 属性,它将根据TextBlock的大小缩小/增长。
答案 2 :(得分:0)
我已经提出了下一个解决方案,它工作得非常好,但我真正想要的是一种设置最小字体和最大字体大小的方法,这样如果只有一个单词,字体可能需要一定的大小,如果文字太长,字体的尺寸会更小,所有字体都是动态的。
代码:
label.Text = label;
label.Measure(new Size(RenderSize.Width, RenderSize.Height));
border.Width = label.DesiredSize.Width + border.Padding.Left + border.Padding.Right + border.BorderThickness.Left + border.BorderThickness.Right;
border.Height = label.DesiredSize.Height + border.Padding.Top + border.Padding.Bottom + border.BorderThickness.Bottom + border.BorderThickness.Top;
和xaml:
<Border BorderBrush="#ff000000" BorderThickness="2" CornerRadius="8" Visibility="Collapsed" Padding="5" Background="#bfff0000" Margin="10,0,10,200" VerticalAlignment="Bottom" x:Name="border">
<StackPanel>
<TextBlock FontSize="40" x:Name="pictureLabel" TextWrapping="Wrap" Foreground="#ff000000" />
</StackPanel>
</Border>