DataBridCell样式被TextBox样式覆盖

时间:2013-02-21 16:24:44

标签: wpf xaml datagrid textbox styles

Style DataGridCell(只有触发器很重要。)

<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拥有它自己的Style。 我需要使用TextBox,因为我想让用户从单元格中选择文本。但是,当选择单元格/行时,我还需要更改Foreground颜色。

  

(背景颜色较暗,前景色较浅,但选择单元格/行时背景颜色较浅,前景色较暗)

修改

我把我的问题编辑得更清楚了。对于以前的误解,我们深表歉意。我的目标是在TextBoxDataGridCell并使用Trigger中的DataGridCellStyle

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

它不会离开/采用Textblock / Textbox样式。 您在其中放置了一个文本框,文本框具有背景。

尝试将TextBox背景设置为透明。如果您只想从单元格中选择文本,我还建议您删除文本框边框。

您可以设置以下属性以获得所需的外观。

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

在TextBox上设置前景

<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>