DatagridCell风格的文本框风格重写(DatagridCell style override

2019-10-17 17:36发布

我有一个StyleDataGridCell (仅触发器是很重要的。)

<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从s DataGridCellStyle

任何帮助表示赞赏。

Answer 1:

它不会离开/服用文本块/文本框样式来代替。 你把一个文本框,在那里和一个文本框有一个背景。

尝试设置文本框背景为透明。 我也建议删除文本框边框,以及如果你想要的是选择从单元格的文本。

您可以设置以下属性得到你想要的效果。

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>


文章来源: DatagridCell style overriden by TextBox style