web-dev-qa-db-ja.com

テキストブロックの背景色へのアクセス

私はこれを見つけました テキストブロックを構成するいくつかの方法を示すMSDNで:

それの多くは私にとってはうまくいくようですが、この部分は失敗します:

textBlock.Background = Brushes.AntiqueWhite;

「背景」の部分は赤で強調表示され、VisualStudioには「Windows.UI.Xaml.Controls.TextBlockには背景の定義が含まれていません」と表示されます。

困惑しています。

これは最近の変更ですか?それとも、これは後で削除されましたか?

17
micahhoover

WinRTはSilverlightに大きく基づいていることを覚えていますが、TextBlockFrameworkElementから派生しており、WPFとは異なり、独自のBackgroundプロパティはありません。

回避策は、コンテナとして機能する追加の要素で同じ効果を提供し、BorderまたはGridBackgroundなどを使用して背景を提供することです。

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

または、Rectangleの後ろにTextBlockが含まれている場合は、Gridセルなどに含まれている場合は、同じものを提供します。ただし、Rectangle直接;

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

残念ながら、これが現在の唯一の選択肢だと思います。お役に立てれば。

34
Chris W.

これにより、背景がアンティークホワイトに設定されます。さらに、グリッドの高さと幅はTextBlockの高さと幅にバインドされているため、グリッドのサイズを手動で設定する必要はありません。

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

UWPでは、多くのコントロールが単純化されており(おそらく、メモリフットプリントを削減するため)、WPFの兄弟に特有の特定のプロパティがありません。

問題のUWP要素に.Backgroundのようなプロパティを設定する代わりに(いくつかの回答がすでに述べているように)、<Grid></Grid>要素内にネストして配置できますが、それはnot推奨されます。 Gridに割り当てているプロパティを複数の子要素間で共有する必要があります。背景(またはUWPコントロールにない他のプロパティ)をTextBlockなどに適用する場合は、それを<Border></Border>要素でラップすることをお勧めします。単一の要素をカスタマイズしようとしているだけの場合のアプローチであり、レイアウトの計算とメモリオーバーヘッドの両方の観点から、<Grid />でラップするよりもはるかに軽いアプローチです。

0

TextBlockの背景色を設定するには

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