2013-02-21 3 views
1

У меня есть Style для DataGridCellDatagridCell стиль перекрываться стиля TextBox

<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 для изменения, если выбрана ячейка/строка .

(Цвет фона темно и цвет переднего плана света, но при выборе/строки ячейки, то цвет фона свет и цвет переднего плана должен быть темным)

РЕДАКТИРОВАТЬ

Я отредактировал мой вопрос, чтобы быть более понятным. Извините за предыдущие недоразумения. Моя цель здесь состоит в том, чтобы TextBox в DataGridCell и использовать Trigger s от DataGridCellStyle.

Любая помощь приветствуется.

ответ

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

Мне очень жаль. Возможно, я недостаточно объяснил себе ... Нет проблем с установкой поля текстового поля для прозрачного ... реальная проблема заключается в том, что текстовое поле все еще имеет собственный передний план, а не передний план ячейки ... поэтому он не изменяется, когда строка выбран. см. эти триггеры в DataGridCellStyle –

+0

Я отредактировал мой вопрос, чтобы быть более понятным. Спасибо. –

+0

Получил это. Исправлена. Я просто решил эту идентичную проблему по другому вопросу, как час назад. –

Смежные вопросы