2013-03-21 2 views
1

У меня есть приложение wpf 4.5, у которого есть datagrid в usercontrol. Я разработал стиль для datagrid в Blend, но когда я копирую стиль в проект VS 2012, он работает неправильно.WPF Datagrid Style Selected Row

Вот что базовый стиль выглядит в смесь:

Blend DataGrid Style

Пожалуйста, обратите внимание на цвет текста в выбранной строке (зеленый) и отступы вокруг текстового поля редактируемого

Теперь вот что тот же стиль выглядит Visual Studio 2012:

VS Datagrid Style

Таким образом, выделенный текст из выбранной строки имеет тот же цвет, что и фон (что делает его невидимым), и я не могу изменить бордкорлор или поле текста для соответствия стилю blend.

здесь стиль ячейки:

<Style TargetType="{x:Type DataGridCell}"> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Border x:Name="border" 
         BorderBrush="Transparent" 
         BorderThickness="1" 
         Background="Transparent" 
         SnapsToDevicePixels="True" 
         Margin="15,10,15,10"> 
        <ContentPresenter Name="CellContent" SnapsToDevicePixels="True" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Foreground" Value="Green"/> 
        </Trigger> 
        <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
         <Setter Property="BorderBrush" TargetName="border" Value="#FFD8D8D8"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate>     
     </Setter.Value> 
    </Setter> 
</Style> 

так что вы можете увидеть, что триггер маркировки зеленый, как foregorund цветных работ в смеси, но не Visual Studio. Я думаю, что это системный цвет, который переопределяет триггер каким-то образом, но я не уверен, как это отслеживать.

Может кто-то, пожалуйста, помогите мне исправить эту проблему стиля, установив выбранный цвет текста строки и рамки/поля текстового поля.

This is a link to the entire datagrid style resource dictionary

заранее спасибо

ответ

1

Так, оказалось, конфликт в стиле DataGridCell. У меня был стиль DataGridCell, примененный без имени ключа ко всем ячейкам datagrid. Затем я создал другой стиль ячейки, основанный на упомянутом выше. Но по какой-то причине, если я попытался применить этот стиль ячейки к конкретным объявлениям столбцов в datagrid, стиль сломался бы. Поэтому мне пришлось удалить «на основе стилей» и найти другой способ сделать форматирование с учетом столбцов.

EDIT: см стиль здесь, слишком долго, чтобы получить возможность отправлять DataGridStyle

+0

JKing, каков был последний шаблон? Благодаря! – Rachael

+0

@ UB3571, я отредактировал свой ответ, чтобы включить мой datagridstyle –

1

Привет Я попробовал ваш стиль и на моей машине ForegroundColor изменен на зеленый ... Но если это не распространяется работу в вашем DevEnvironment вы могли бы попробовать перекрывая SystemColor для текста выбранной строки!

добавить это к вашему стилю и удалить триггер

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Green" /> 
+0

спасибо, я был на этом в течение нескольких часов, индивидуально добавление и удаление стилей и словарей ресурсов, чтобы узнать, есть ли какой-либо конфликт. Я принял вашу идею и сделал новый проект WPF в Visual Studio, и стиль отлично работает в новом проекте. Итак, я добавил все свои ресурсы стиля из текущего проекта по одному в новый проект, чтобы увидеть, произошел ли конфликт или произошли изменения. Ничего! Стиль все еще работает в новом проекте, даже если все стили включены в качестве ресурса. Есть ли способ отследить приложение wpf, чтобы увидеть, какие стили применяются к элементу? –

+0

Я уже пробовал программу snoop, но не смог найти место, где он скажет мне, какой стиль применяется. Он просто говорит мне, что значения свойств элемента –