3

私はMVVMを使用しており、検証を行っている編集可能な列を持つデータグリッドを持っています:

<DataGridTemplateColumn Header="Key" Width="80">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Key}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <vw:NumericTextBox Text="{Binding Key, Mode=TwoWay,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>

エラーをツールチップとして表示するスタイルを追加しました。

<Style TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

そのため、検証が開始され、セルが赤で囲まれ、エラー メッセージのツールチップが表示されます。

2 つの問題があります。まず、ユーザーがセルの外をクリックすると、セルの輪郭が赤く表示されたままになりますが、ホバーしてもツールチップが表示されません。これを機能させるにはどうすればよいですか?2 番目の問題は、行の横にオレンジ色の感嘆符があることです。これは望ましくありません。これは、グリッドまたは行のデフォルトのスタイリングが原因であると思います。どうすればそれを取り除くことができますか (赤いアウトラインは問題ありません)。

4

2 に答える 2

3

感嘆符を削除するには、次のようにデータグリッドの行スタイルを編集する必要があります。

<DataGrid ...> 
<DataGrid.RowStyle> 
    <Style TargetType="DataGridRow"> 
        <Setter Property="ValidationErrorTemplate" Value="{x:Null}"/> 
    </Style> 
</DataGrid.RowStyle> 
<!-- ... --> 
</DataGrid> 
于 2012-05-16T13:52:22.810 に答える
2

最初の部分 - ホバー時にエラーを表示するには、TextBlock ターゲット タイプのツール ヒント プロパティも設定する必要があります。以下の 2 つのスタイルを使用して、データグリッド セルの編集時とホバー時に IDataErrorInfo からのエラーを表示します。

<Style x:Key="EditCellStyleError" TargetType="{x:Type TextBox}">
        <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>
    <Style x:Key="CellStyleError" 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>

これらのスタイルをデータグリッドに設定します

<DataGridTextColumn .....
EditingElementStyle="{StaticResource EditCellStyleError}" ElementStyle="{StaticResource CellStyleError}"
</DataGridTextColumn>
于 2014-01-13T10:51:14.533 に答える