1

私にはStyleforDataGridCellがあります(トリガーのみが重要です)。

<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Foreground" Value="{StaticResource ForegroundBrush}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border Background="Transparent" BorderBrush="{TemplateBinding BorderBrush}"   BorderThickness="0"  SnapsToDevicePixels="True" >
                    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Margin="4, 0, 0, 0"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Foreground" Value="{StaticResource DarkForegroundBrush}" />
        </Trigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
        </Trigger>
    </Style.Triggers>
</Style>

次のように列を定義すると機能します。

<DataGridTemplateColumn Header="Column1" Width="Auto" IsReadOnly="True">
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding Property1, Mode=OneWay}" />
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

しかし、私がこのようなTextBox代わりに持っているときTextBlock

<DataGridTemplateColumn Width="Auto" Header="Column1">
     <DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
                 <TextBox Text="{Binding Path=Property1, Mode=OneWay}" IsReadOnly="True" TextWrapping="Wrap" />
           </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

TextBox独自のものがあるので動作しませんStyleTextBoxユーザーにセルからテキストを選択させたいので、使用する必要があります。ただし、セル/行を選択Foregroundしたときに色を変更する必要もあります。

(背景色は暗く、前景色は明るいですが、セル/行を選択すると、背景色は明るく、前景色は暗くなります)

編集

質問をより明確にするために編集しました。以前の誤解をお詫び申し上げます。ここでの私の目標は、TextBoxからsDataGridCellを使用することです。TriggerDataGridCellStyle

助けていただければ幸いです。

4

1 に答える 1

0

代わりに、Textblock/Textboxスタイルを離れたり取ったりすることはありません。そこにテキストボックスを配置すると、テキストボックスに背景が表示されます。

TextBoxの背景を透明に設定してみてください。セルからテキストを選択するだけの場合は、テキストボックスの境界線も削除することをお勧めします。

次のプロパティを設定して、希望の外観を得ることができます。

Background="Transparent" BorderThickness="0" IsReadOnly="True"

テキストボックスに前景を設定するには

<DataTemplate>
    <TextBox Name="Display" Text=.../>
    <DataTemplate.Triggers>

        <DataTrigger Binding="{Binding
                     RelativeSource={RelativeSource
                     Mode=FindAncestor,AncestorType={x:Type DataGridCell}},Path=IsSelected}" Value="true">
            <Setter TargetName="Display" Property="Foreground">
                <Setter.Value>
                    <SolidColorBrush Color="{StaticResource DarkForegroundBrush}"/>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </DataTemplate.Triggers/>
</DataTemplate>
于 2013-03-21T14:23:14.940 に答える