1

Excel では、青みがかった背景の選択色が半透明に見えるため、ユーザーはセルが選択されていても実際の背景色を見ることができます。WPF データグリッドで同じ効果を得るにはどうすればよいですか?

私の特定のケースでは、セルのBackground色もビューモデルにバインドされています。私の第一印象は、セル スタイルでトリガーを使用することです。

  <Style.Triggers>
      <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="????"></Setter>
      </Trigger>
  </Style.Triggers>

次に、どういうわけか計算する必要があります...青と選択されていない色Valueの組み合わせですか?Background透明な青のブラシを使用してみましたが、結果は前のセルの背景色と混ざりません。

4

2 に答える 2

4

あなたが試したことは実際にうまくいくはずです。

この例を見てください:

<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource SampleDataSource}}">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="10*"/>
    </Grid.RowDefinitions>
    <Rectangle Fill="#FF0090FF"/>
    <DataGrid Grid.Row="1" ItemsSource="{Binding TestCollection}" Background="Purple">
        <DataGrid.Resources>
            <Style TargetType="DataGridRow">
                <Setter Property="Background" Value="Yellow"/>
            </Style>
            <Style TargetType="DataGridCell">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="true">
                        <Setter Property="Background" Value="#6F0090FF"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Resources>
    </DataGrid>
</Grid>

ここに画像の説明を入力

青い長方形があります。Fillプロパティが に設定されています#FF0090FF。あなたが注意すべきことは、あなたが呼んでいるもの"UnSelected Background color"は実際にBackgroundDataGridRow.

Fillそして今...選択したセルの背景色は、その四角形( )とまったく同じ#0090FFです。Alphaだいたい50%( )までしか変化しませんでし#6F0090FFた。そして、あなたが期待するように、あなたが見るのは何か緑がかったものです.

ここに画像の説明を入力

アップデート

Background保存したい場合DataGridCellは、別のアプローチを選択する必要があります。あなたの中にもう1つのレイヤーを作成することをお勧めしますDataGridCell's ControlTemplate

このレイヤー...たとえば「selectedCellVisual」と呼ぶことができ、セルが選択されている場合にのみ表示されます。

だから...作成する必要があるため、前の例からControlTemplateスタイルを変更する必要があります。DataGridCell

<Style TargetType="DataGridCell" >
                <Setter Property="OverridesDefaultStyle" Value="True"/>
                <Setter Property="Background" Value="Red"/>
                <Setter Property="BorderBrush" Value="Transparent"/>
                <Setter Property="BorderThickness" Value="0"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridCell}">
                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                                <Grid>
                                    <Rectangle x:Name="selectedCellVisual" Fill="#6F0090FF" Visibility="Collapsed"/>
                                    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                </Grid>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="true">
                                    <Setter TargetName="selectedCellVisual" Property="Visibility" Value="Visible"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

DataGridCellBackgroundになり、選択すると半透明の青い四角形「selectedCellVisual」が表示されます。背景の透明な青と赤は、最終的な紫の色になります。

ここに画像の説明を入力

あなたはに注意を払う必要があります

<Setter Property="OverridesDefaultStyle" Value="True"/>

IsSelectedセルの背景を変更するプロパティのトリガーを変更していないため、そこにある必要があります。デフォルトのスタイルで定義されています。それは変化Backgroundし、Foregroundプロパティです。これは最初の例でわかります。前景は白に設定され、セルの周りに 1 ピクセル幅の青い線があります。

于 2013-08-07T21:55:09.623 に答える