1

ユーザーコントロールにデータグリッドがあるwpf4.5アプリケーションがあります。Blendでデータグリッドのスタイルを設計しましたが、スタイルをVS 2012プロジェクトにコピーすると、正しく機能しません。

Blendの基本スタイルは次のようになります。

DataGridスタイルをブレンド

選択した行のテキストの色(緑)と編集中のテキストボックスの周囲のパディングに注意してください

これが、同じスタイルがVisualStudio2012のように見えるものです。

VSデータグリッドスタイル

したがって、選択した行で強調表示されたテキストは背景と同じ色になり(非表示になります)、テキストボックスの境界線の色や余白をブレンドスタイルに合わせて変更することはできません。

セルスタイルは次のとおりです。

<Style TargetType="{x:Type DataGridCell}">
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border x:Name="border"
                        BorderBrush="Transparent"
                        BorderThickness="1"
                        Background="Transparent"
                        SnapsToDevicePixels="True"
                        Margin="15,10,15,10">
                    <ContentPresenter Name="CellContent" SnapsToDevicePixels="True" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Foreground" Value="Green"/>
                    </Trigger>
                    <Trigger Property="IsKeyboardFocusWithin" Value="True">
                        <Setter Property="BorderBrush" TargetName="border" Value="#FFD8D8D8"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>                
        </Setter.Value>
    </Setter>
</Style>

そのため、前の色として緑色にマークされているトリガーはブレンドでは機能しますが、VisualStudioでは機能しないことがわかります。トリガーをなんらかの形でオーバーライドしているのはシステムカラーだと思いますが、これを追跡する方法がわかりません。

選択した行のテキストの色とテキストボックスの境界線/余白を設定して、このスタイルの問題を修正するのを手伝ってもらえますか。

これは、データグリッドスタイルのリソースディクショナリ全体へのリンクです

前もって感謝します

4

2 に答える 2

1

こんにちは私はあなたのスタイルを試しましたが、私のマシンではForegroundColorが緑に変わりました...しかし、DevEnvironmentで機能しない場合は、選択した行のテキストのSystemColorをオーバーライドしてみてください。

これをスタイルに追加し、トリガーを削除します

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Green" />
于 2013-03-21T08:07:03.923 に答える
1

したがって、DataGridCellスタイルの競合であることが判明しました。すべてのデータグリッドセルにキー名なしでDataGridCellスタイルを適用しました。次に、上記のセルスタイルに基づいて別のセルスタイルを作成しましたが、何らかの理由で、このセルスタイルをデータグリッドの特定の列宣言に適用しようとすると、スタイルが壊れてしまいます。そのため、「スタイルに基づく」を削除して、列固有のフォーマットを行う別の方法を見つける必要がありました。

編集:ここでスタイルを参照してください。DataGridStyleを投稿するには長すぎます

于 2013-03-26T05:22:57.950 に答える