访问文本块的背景颜色

21

我在微软开发者网站上找到了这个示例,展示了一些配置文本块的方法:

其中很多看起来对我都有效,但是这部分会失败:

textBlock.Background = Brushes.AntiqueWhite;

“Background”部分被用红色下划线标出,Visual Studio显示:“Windows.UI.Xaml.Controls.TextBlock不包含Background的定义”。

我感到困惑。

这是最近更改的吗?还是后来删除了?


3
您的 MSDN 链接不是针对 TextBlock 的 Windows Runtime 版本。正确的链接在这里:http://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/windows.ui.xaml.controls.textblock.aspx - chue x
5个回答

39

如果我没记错的话,WinRT在很大程度上基于Silverlight,其中派生自,并且不像WPF那样有自己的属性。

一个解决方法是提供另一个元素作为容器来实现同样的效果,并使用或以及等属性来提供背景。类似这样;

<Border Background="AntiqueWhite">
  <TextBlock/>
</Border>

或者在TextBlock后面放一个Rectangle,如果它被包含在Grid单元格中,可以提供相同的效果,除非你想直接设置Rectangle的大小;

<Rectangle Fill="AntiqueWhite"/>
<TextBlock/>

很不幸,我认为这是您当前唯一的选择。希望这有所帮助。


如果我想为9个TextBlock中的5个TextBlock设置“背景颜色”,该怎么办? - Moumit
@MoumitMondal 那我建议您使用与上面相同的想法制作一个 ContentControl,这样您就可以更轻松地在多个位置应用它 :) - Chris W.
@MoumitMondal 不用担心,提问是学习的好方法,这也是SO的宗旨。 :) - Chris W.
1
@vapcguy,这是一个非常普遍的情况,因为人们正在从WPF转向UWP,并且仍在学习它们之间的区别,因为他们熟悉的是WPF。所以他们会快速搜索一下,忘记检查框架,然后发布任何与他们问题相关的内容。就像我说的,不用担心,朋友。干杯! - Chris W.
1
@vapcguy 嗯,XAML通常都是相同的,除了一些语法上的细微差别和可用属性(例如附加属性等),使用方式基本相同(除非你涉及像Xamarin XAML这样的东西,其中类似StackPanel的东西变成了StackLayout等)。然而,使用它们的框架很多...但它们都源自XML,就像HTML、SVG等等一样。一切都很好。 - Chris W.
显示剩余13条评论

1
设置 TextBlock 的背景颜色
TextblockName.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FF202B49"));

1

这将背景设置为古董白。此外,网格的高度和宽度绑定到TextBlock的大小,因此您不必手动设置网格的大小。

        <Grid Background="AntiqueWhite" Height="{Binding ActualHeight , ElementName=textBlock1}" Width="{Binding ActualHeight , ElementName=textBlock1}">
         <TextBlock x:Name="textBlock1" Text="Text" />
        </Grid>

这个不起作用。一旦选择文本框,它的背景就会变成白色。 - Gavin Williams

0
在UWP中,许多控件已经被简化(可能是为了减少它们的内存占用),并且没有其WPF兄弟所具有的某些属性。
与在UWP元素上设置像.Background这样的属性(正如一些答案已经提到的那样)不同,它可以被放置在一个嵌套的<Grid></Grid>元素中,但这并不推荐,除非您希望将分配给Grid的属性共享在多个子元素之间。如果您想将背景(或其他在UWP控件中找不到的属性)应用于TextBlock或类似的元素,则应该将其包装在<Border></Border>元素中,这是当您只想自定义单个元素时的推荐方法,并且比将其包装在<Grid />中更轻量级,无论是在布局计算还是内存开销方面。

-1

此外,您还可以使用以下代码进行动态更改。(仅适用于 WPF)

textBlock.Background = new SolidColorBrush(Colors.AntiqueWhite);

在WPF领域,这对我来说很好用。 OP正在询问XAML控件TextBlock,因为MSDN链接指向TextBlock.FontSize。从那里上升一个级别是TextBlock属性:https://msdn.microsoft.com/en-us/library/system.windows.controls.textblock_properties(v=vs.110).aspx,其中明确列出了`Background`作为属性。那些在Silverlight/WinRT领域可能没有它。我想这就是被踩的原因。 - vapcguy
如果只涉及WPF,那么它与问题无关。 - Gavin Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接