Доступ к цвету фона текстового блока

Я нашел этот пример в MSDN, который показывает некоторые способы настройки текстового блока:

Многие из них работают для меня, но эта часть не работает:

textBlock.Background = Brushes.AntiqueWhite;

Часть "Background" подчеркнута красным цветом, а Visual Studio говорит: "Windows.UI.Xaml.Controls.TextBlock не содержит определения для фона".

Я озадачен.

Это недавнее изменение? Или это удалено позже?

Ответы

Ответ 1

Если я помню, что правильный WinRT много основан на Silverlight, тогда как TextBlock происходит от FrameworkElement и в отличие от WPF, он не имеет собственного свойства Background.

Обходной путь состоял бы в том, чтобы просто обеспечить тот же эффект дополнительным элементом, который будет действовать как контейнер, и предоставить фон с помощью Border или Grid с помощью Background и т.д. Что-то вроде:

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

Или, возможно, Rectangle позади TextBlock, чтобы обеспечить ту же самую вещь, если она содержит, скажем, ячейку Grid или понравится, если вы не хотите напрямую устанавливать размеры на Rectangle;

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

К сожалению, я думаю, что это ваша единственная альтернатива. Надеюсь, это поможет.

Ответ 2

Это устанавливает фон в античный белый. Кроме того, высота и ширина сетки привязаны к ширине сетки TextBlock, поэтому вам не нужно вручную устанавливать размер сетки.

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

Ответ 3

В UWP многие элементы управления были упрощены (возможно, чтобы уменьшить их объем памяти) и не имеют определенных свойств, типичных для их собратьев WPF.

Вместо установки свойств, таких как .Background в рассматриваемом элементе UWP (как уже упоминалось в некоторых ответах) его можно поместить вложенным в элемент <Grid></Grid>, но это не рекомендуется, если вы не хотите, чтобы свойства, которые вы назначаете Grid для совместного использования среди нескольких дочерних элементов. Если вы хотите применить фон (или другое свойство, не найденное в элементе управления UWP) к TextBlock или аналогичному объекту, вам следует обернуть его в элемент <Border></Border>, что является рекомендуемым подходом при Вы пытаетесь настроить только один элемент, и этот подход гораздо проще, чем заключать его в <Grid/>, как с точки зрения вычисления макета, так и с точки зрения затрат памяти.

Ответ 4

Также вы можете использовать следующий код для динамических изменений. (Только для WPF)

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