【问题标题】:Accessing background color of textblock访问文本块的背景颜色
【发布时间】:2013-03-14 01:30:28
【问题描述】:

我在 MSDN 上找到了这个 example,它显示了一些配置文本块的方法:

其中很多似乎对我有用,但这部分失败了:

textBlock.Background = Brushes.AntiqueWhite;

“背景”部分带有红色下划线,Visual Studio 显示:“Windows.UI.Xaml.Controls.TextBlock 不包含背景定义”。

我很困惑。

这是最近的变化吗?还是后来被删除了?

【问题讨论】:

标签: xaml windows-runtime windows-store-apps winrt-xaml


【解决方案1】:

如果我没记错的话,WinRT 很大程度上基于 Silverlight,而 TextBlock 派生自 FrameworkElement,与 WPF 不同,它没有自己的 Background 属性。

一种解决方法是只提供相同的效果,并使用附加元素充当容器,并使用BorderGridBackground 等提供背景。类似的东西;

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

或者TextBlock 后面的Rectangle 以提供相同的东西,如果它包含在Grid 单元或类似的东西中,除非您想直接在Rectangle 上设置大小;

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

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

【讨论】:

  • 如果我想为 9 个 TextBlock 中的 5 个 TextBlock 设置“背景颜色”怎么办??
  • @MoumitMondal 然后我建议使用与上述相同的想法制作ContentControl,以便您可以更轻松地将其应用到多个地方:)
  • 谢谢@Chris W ...我2天前才开始学习XAML ...所以ContentControl我也不清楚...但我很快就会明白.. .:D
  • @vapcguy 是的,这是一个非常常见的场景,因为人们正在从 WPF 过渡到 UWP,并且由于他们熟悉 WPF,因此他们仍在自己学习差异。所以他们做了一个快速的谷歌,忘记检查框架,并发布与他们能找到的问题相关的任何内容。就像我说的,别担心,伙计。干杯
  • @vapcguy 不,XAML 通常实际上是相同的,除了在语法和附加属性等使用中可用的一些细微差别之外(除了当你进入像 xamarin xaml 这样的东西像 StackPanel 变成 StackLayout 等)但是使用它们的框架很多......但它们都来自 XML,就像 HTML、SVG 等等等一样......这一切都很好。
【解决方案2】:

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

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

【讨论】:

  • 这不起作用。一旦选择了文本框,它的背景就会变为白色。
【解决方案3】:

为 TextBlock 设置背景颜色

TextblockName.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FF202B49"));

【讨论】:

    【解决方案4】:

    在 UWP 中,许多控件已被简化(可能是为了减少它们的内存占用),并且不具有其 WPF 兄弟的某些典型属性。

    可以将其嵌套在 &lt;Grid&gt;&lt;/Grid&gt; 元素中,而不是在相关 UWP 元素上设置 .Background 之类的属性(正如一些答案已经提到的那样),但建议您这样做,除非您希望您分配给 Grid 的属性在 多个 子元素之间共享。如果您想将背景(或 UWP 控件中未找到的其他属性)应用到 TextBlock 或类似内容,您应该将其包装在 &lt;Border&gt;&lt;/Border&gt; 元素中,这是推荐的方法仅尝试自定义单个元素,并且在布局计算和内存开销方面都比将其包装在 &lt;Grid /&gt;轻得多

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 在 WPF 领域对我来说很好。 OP 询问 XAML 控件 TextBlock,因为 MSDN 链接转到 TextBlock.FontSize。从那里上一层是TextBlock 属性:msdn.microsoft.com/en-us/library/…,它清楚地将Background 列为属性。 Silverlight/WinRT 领域的用户可能没有它。我想这就是反对票的原因。
      • 如果只针对 WPF 则与问题无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2014-12-30
      相关资源
      最近更新 更多