如何设置更改其内容的textBlock的背景

时间:2013-02-11 14:54:45

标签: background windows-phone-8 textblock

背景

我试图将一个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的背景?

3 个答案:

答案 0 :(得分:3)

解决方案非常简单。只需将HirizontalAlignment设置为Left。希望这适用于你的情况。

<StackPanel HorizontalAlignment="Left">
            <Border Background="#66FFFFFF">                    
                    <TextBlock/>                    
            </Border>
</StackPanel>

答案 1 :(得分:0)

根据this question(适用于Silverlight - 但仍然是xaml),无法明确设置TextBlock的背景颜色。您最好的选择是将TextBlock包裹在GridBorder

如果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>