0

DataGrid と TextBlocks のスタイルを暗黙的に適用しようとしています。

TextBlock の ForeGround には白色が必要です。

DataGrid の行には、黒色が必要です。

これに加えて、DataGrid のヘッダー列にもが必要です。

ここに画像の説明を入力

MainPage で暗黙的なスタイルをグローバルに適用すると

<UserControl>
 <UserControl.Resorces>
    <Style targetType="TextBlock">
        <Setter Property="Foreground" Value="White"/>
    </Style>
 </UserControl.Resorces>
</UserControl>

TextBlock のフォアグラウンドを白にする操作が完了しました。しかし、これに加えて、DataGridのすべての要素(デフォルトではコンテンツ要素はテキストブロックだと思います)は白色に変わります。

ご想像のとおり、白地に白は見栄えがよくありません:)では、DataGridの要素の前景を特に黒に指定するにはどうすればよいですか?

以下に示すのと同じテクニックを使用してそれを行うことができますが、これは DataGrid ごとに高価な操作です。詐欺として、DataGridのHeaderColumnsを再び白くしたい.この操作により、すべてが黒くなります。

css スタイルで行うような明示的な方法はありますか?

これが、コントロールテンプレートによってこの目標を達成しようとしたものです。しかし、DataGrid の ContentControl は動的であるため、チャンスはありません。

<DataGrid>
<DataGrid.Resources>
    <Style targetType="TextBlock">
        <Setter Property="Foreground" Value="Black"/>
    </Style>
<DataGrid.Resources>

実際、Telerik の RadGridView を使用していますが、質問をよりグローバルにするために、sdk の DataGrid の例を示します。

<Style TargetType="sdk:DataGrid">
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="RowDetailsTemplate" Value="{StaticResource DataTemplate1}"/>
    <Setter Property="Template" Value="{StaticResource ControlTemplate1}"/>
</Style>

<ControlTemplate x:Key="ControlTemplate1" TargetType="sdk:DataGrid">
    <Grid/>
</ControlTemplate>

<DataTemplate x:Key="DataTemplate1">
    <Grid/>
</DataTemplate>

前もって感謝します!

4

1 に答える 1

1

私だったら、アドホックなセッターの変更を行って元のテンプレートのビットをオーバーライドしようとするのではなく、フル コントロール テンプレートを引き出してそれに応じてスタイルを設定します。Expression Blend で右クリックし、[テンプレートの編集] -> [コピーの編集] を選択して、行などのテンプレートを分割し、代わりに StaticResource を使用してそれらを暗黙的に適用します。

于 2012-12-21T15:55:19.280 に答える