2012-03-15 1 views
4

Я пытаюсь установить Validation.ErrorTemplate из DataGridCells, вот код XAML:DataGridCell Validation.ErrorTemplate игнорировал

<Style x:Key="{x:Type DataGridCell}" x:Uid="dataGridCellErrorTemplate" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate > 
       <Border BorderBrush="Green" BorderThickness="2" ToolTip="Heidenei"></Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <!-- following line only for demonstration that the setter is working ... --> 
    <Setter Property="Background" Value="Aquamarine"></Setter>    
</Style> 

а фон из datagridcells успешно окрашен в зеленом цвете (независимо от какого-либо результата проверки) используемый Validation.ErrorTemplate по-прежнему является значением по умолчанию, то есть красной рамкой.

Я знаю, что в stackoverflow были аналогичные проблемы, например. Styling DataGridCell Error Template , но они действительно не решают мою проблему.

любая помощь

Frank

+0

[Поскольку контроль редактирования создаются во время выполнения, вы не можете использовать Validation.ErrorTemplate вложенное свойство, как вы бы с простым управлением] (http://msdn.microsoft.com/en-us/library/ ee622975.aspx). вам может потребоваться сделать это после рендеринга ('DispatcherTimer') –

+0

Спасибо за ваши отзывы, но я не уверен, насколько я это понимаю. В моем сценарии datagridcells не редактируются пользователем (поэтому без редактирования), а фоновым процессом. Я все еще хочу использовать IDataErrorInfo, чтобы выделить те поля, которые имеют проблемные значения. – FrankE

+0

, когда говорят «редактирование элементов управления», (я думаю), они означают «элементы управления, встроенные в каждый« DataGridCell ». другими словами, шаблон может применяться к ячейке, НО он перезаписывается при создании внутреннего элемента управления. поэтому вам может понадобиться захватить, когда создается Row, и прокрутите каждую ячейку, чтобы установить свое значение. –

ответ

4

Я считаю, что я испытываю такой же вопрос.

При использовании DataGridTemplateColumn содержание представлено ContentPresenter. Этот презентатор контента использует шаблон ошибки по умолчанию.

Я не могу найти прямой способ удалить этот шаблон для отдельного пользователя DataGridTemplateColumn, но вы можете удалить его для всех презентаторов содержимого в DataGrid, добавив стиль к ресурсам DataGrid.

<DataGrid.Resources> 
    <Style TargetType="ContentPresenter"> 
     <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> 
    </Style> 
</DataGrid.Resources> 
+0

Жаль, что я не нашел ваш ответ раньше ... провел все утро, пытаясь понять это. Я использую несколько DataGridTemplateColumn со своими собственными шаблонами проверки, и мне нужно было удалить по умолчанию красную рамку вокруг ячейки. Это сделал трюк. – RogerN

+0

Большое спасибо, найти решение не так-то просто! –

0

Я имел счастье удаления раздражающих красную границу, используя следующий TextBlock стиль.

<Style TargetType="TextBlock"> 
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> 
</Style>