Доступ к цвету фона текстового блока
Я нашел этот пример в 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);