0

DataGridTemplateColumns を使用して構築されたデータ グリッドがあります。検証エラーが存在する場合、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>
4

1 に答える 1

3

解決しました!DataTemplate の各 CellTemplate の内部を AdornerDecorator でラップすると、すぐに修正されました。

                        <DataTemplate>
                        <AdornerDecorator>
                            <TextBlock Style="{StaticResource TextBlockValidationStyle}"
                                   Text="{Binding ColumnMapping.DestinationColumnName, 
                                            ValidatesOnDataErrors=True, 
                                            NotifyOnValidationError=True, 
                                            UpdateSourceTrigger=PropertyChanged}"
                                   Validation.ErrorTemplate="{StaticResource validationTemplate}"/>
                        </AdornerDecorator>
                    </DataTemplate>
于 2012-07-20T19:05:18.067 に答える