2012-07-20 39 views
0

我有一個使用DataGridTemplateColumns構建的數據網格。當驗證錯誤存在時,我們將它顯示在CellTemplate的Textblock上。滾動發生時,錯誤樣式在滾動頁面後會丟失。DataGridTemplateColumn.CellTemplate中的TextBlock在滾動時丟失驗證樣式

在我的控制資源:

<ControlTemplate x:Key="validationTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Foreground="Yellow" 
         FontSize="20" 
         VerticalAlignment="Center" 
         Margin="0,0,2,2">!</TextBlock> 
      <Border Grid.Column="1" 
        BorderBrush="Yellow" 
        BorderThickness="1" 
        Margin="0" 
        Padding="0" 
        Height="19"> 
       <AdornedElementPlaceholder/> 
      </Border> 
     </Grid> 
    </ControlTemplate> 

<Style x:Key="TextBlockValidationStyle" TargetType="{x:Type TextBlock}"> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
       <Setter Property="ToolTip" 
       Value="{Binding RelativeSource={RelativeSource Self}, 
       Path=(Validation.Errors)[0].ErrorContent}"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

並在DataGrid中:

<DataGridTemplateColumn Header="Destination Column"> 
        <DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <ComboBox IsEditable="True" 
             IsTextSearchCaseSensitive="{Binding ElementName=caseSensitiveSearch, Path=IsChecked}" 
             ItemsSource="{Binding AllSuggestedNames}" 
             TextSearch.TextPath="SuggestedName" 
             Text="{Binding ColumnMapping.DestinationColumnName, UpdateSourceTrigger=PropertyChanged}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Style="{StaticResource TextBlockValidationStyle}" 
             Text="{Binding ColumnMapping.DestinationColumnName, 
               ValidatesOnDataErrors=True, 
               NotifyOnValidationError=True, 
               UpdateSourceTrigger=PropertyChanged}" 
             Validation.ErrorTemplate="{StaticResource validationTemplate}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
+0

有沒有辦法將CellTemplate的樣式綁定到子驗證錯誤? – nathantruant 2012-07-20 17:23:01

回答

3

解決它!用AdornerDecorator將他們的DataTemplate的每個CellTemplate的內部包裝起來!

     <DataTemplate> 
         <AdornerDecorator> 
          <TextBlock Style="{StaticResource TextBlockValidationStyle}" 
            Text="{Binding ColumnMapping.DestinationColumnName, 
              ValidatesOnDataErrors=True, 
              NotifyOnValidationError=True, 
              UpdateSourceTrigger=PropertyChanged}" 
            Validation.ErrorTemplate="{StaticResource validationTemplate}"/> 
         </AdornerDecorator> 
        </DataTemplate>