2

現在、DataGrid を使用してテーブルを保持する WPF ウィンドウを構築しています。バインドと更新は正常に機能します。スタイリングも非常に軽視していますが、選択に関しては問題が発生しました。前提条件は次のとおりです。

  • テーブルは読み取り専用です
  • 行全体の選択

これは私のテーブルのソース コードです: (はい、選択色を 3 回、DataGrid に 1 回、行に 1 回、セルに 1 回設定したことは知っています。そのうちの 1 つが役立つと思いましたが、そうではありませんケース。)

<DataGrid x:Name="dgv" SelectionMode="Single" SelectionUnit="FullRow" AutoGenerateColumns="False" Grid.Column="0" Grid.RowSpan="3" Margin="8" RowHeight="32" GridLinesVisibility="Horizontal" HeadersVisibility="Column" HorizontalScrollBarVisibility="Hidden"
              CanUserAddRows="False"
              CanUserDeleteRows="False"
              CanUserReorderColumns="False"
              CanUserResizeColumns="False"
              CanUserResizeRows="False"
              CanUserSortColumns="True"
              IsReadOnly="True"
              LoadingRow="dgv_LoadingRow"
              >
        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"></SolidColorBrush>
                </Style.Resources>
                <Setter Property="VerticalAlignment" Value="center"></Setter>
                <Setter Property="Padding" Value="4"></Setter>
                <Setter Property="Margin" Value="4"></Setter>
            </Style>
        </DataGrid.CellStyle>
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"></SolidColorBrush>
                </Style.Resources>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.Style>
            <Style TargetType="DataGrid">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"></SolidColorBrush>
                </Style.Resources>
            </Style>
        </DataGrid.Style>

その後、Column- および RowDefinitions に続きます...

次の問題が発生します。

  • 行全体ではなく、セルのみが選択されます。セルの余白により、非常に奇妙に見えます (スクリーンショットを参照)。
  • セルの余白 (スクリーンショットで赤くレンダリングされていない領域) をクリックしても行が選択されない - 行の選択が非常に直感的ではなくなります...
  • 行を選択するためにクリックしたセルはまだ強調表示されています (選択した行の「Peter Müller」の周りに黒い境界線があることに注意してください)。

結果のスクリーンショットを次に示します。

ここに画像の説明を入力

4

2 に答える 2

1

セル定義で余白を削除するとどうなるでしょうか? これは、セルが余分なスペースを占有し、赤がそのスペースをカバーしていないことを示しています。マージンを削除した場合、探しているものが得られますか。本当の答えはDataGrid.RowBackground[Property][1]にあると思います。

プロパティ値の型: System.Windows.Media.Brush 行の背景を描画するブラシ。登録されたデフォルトは null です。値に影響を与える可能性のあるものの詳細については、DependencyProperty を参照してください。

IsSelected 状態でトリガーを使用して、色を設定できます。デフォルトでは、DataGrid の行全体が選択されています。

<DataGrid Name="dataGrid1" Margin="12,12,0,0">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="Background" Value="LightBlue" />
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>
于 2013-03-18T17:01:15.993 に答える
0

デフォルトの背景行選択を変更するため。1) datagridrow スタイルとテンプレートを編集する必要があります (つまりhttp://msdn.microsoft.com/en-us/library/cc278066%28v=vs.95%29.aspx ) 2) selectionchanged イベントを処理し、行の背景を変更します. 3) または、データグリッド行がロードされたイベントで、「BackgroundRectangle」に等しい childrenoftype 長方形を取得し、必要な色を設定します。これを使用すると、データグリッド内のすべての行に影響します。1 と似ていますが、コードビハインドでこれを実行します。

これがあなたにいくつかのアイデアを与えることを願っています。

于 2013-03-18T17:01:45.403 に答える