2013-02-21 47 views
1

我有DataGridCell一个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颜色。

(背景颜色是深颜色和前景颜色是轻,但在选择了小区/行,则背景颜色为淡和前景颜色应该是暗的)

EDIT

我编辑我的问题更清楚。对不起以前的误解。我的目标是TextBoxDataGridCell中,并使用Trigger来自DataGridCellStyle

任何帮助表示赞赏。

回答

0

它不会离开/取代文本块/文本框样式。 你把一个文本框放在那里,一个文本框有一个背景。

尝试将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> 
+0

真是对不起前景。也许我没有足够的自我解释......设置文本框背景为透明没有问题......真正的问题是,文本框仍然有自己的前景,而不是单元格的前景......所以当行是选择。请参阅DataGridCellStyle中的那些触发器 – 2013-03-21 15:58:26

+0

我编辑了我的问题以便更清楚。谢谢。 – 2013-03-21 18:58:24

+0

明白了。固定。我刚刚在一个小时前的另一个问题上解决了这个相同的问题。 – 2013-03-22 17:10:58