【问题标题】:WPF: Show Tooltip message on custom DataGrid cells when IDataErrorInfoWPF:当 IDataErrorInfo 时在自定义 DataGrid 单元格上显示工具提示消息
【发布时间】:2017-01-27 20:34:01
【问题描述】:

我对 WPF 还很陌生,但在过去的几天里,我已经阅读了很多关于它以及 MVVM 的内容。 我的 WPF 显示一个带有自定义列模板的 DataGrid(使用 Xceed WPF 工具包中的 NumericUpDown 控件)。其中三列包含 3D 矢量的十进制坐标。我使用 IDataErrorInfo 来确保向量的长度永远不会为 0(所有三列不能同时为 0)。到目前为止,这一切正常,当验证失败时,单元格被标记为红色,但我还想在工具提示或类似内容中显示错误消息。

<DataGrid [...]>
    <DataGrid.Columns>
        [...]
        <DataGridTemplateColumn Header="X" [...]>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <xctk:DecimalUpDown Value="{Binding PositionX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}">
                    </xctk:DecimalUpDown>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        [... and same thing for Y and Z]
    </DataGrid.Columns>
</DataGrid>

这是我现在被困几个小时的地方,所以我希望你能在这里帮助我:

如何在自定义模板列上显示错误工具提示?

我已经阅读了很多关于错误工具提示的文章和线程,但其中大部分都在纯 TextBox 或 DataGridTextColumns 上,并且尝试了很多,但到目前为止仍无法正常工作。

它们中的大多数看起来像这样:

<Style x:Key="errorStyle" TargetType="{x:Type TextBox}">
    <Setter Property="Padding" Value="-2"/>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="Background" Value="Red"/>
            <Setter Property="ToolTip" 
                Value="{Binding RelativeSource={RelativeSource Self},
                Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

从这里: https://msdn.microsoft.com/library/ee622975%28v=vs.100%29.aspx

或更多示例:

没有任何东西向我显示任何工具提示。

你能给我一个提示吗,

  • 如何此样式触发器定义必须查找不包含 TextBox 的单元格,
  • 在哪里定义必须在
  • 如果列需要以某种方式引用此定义?

谢谢!

【问题讨论】:

    标签: c# wpf validation datagrid idataerrorinfo


    【解决方案1】:

    如果附加的 Validation.HasError 属性返回 true,则使用触发器将控件的 Style 属性设置为 Style,该触发器在 CellTemplate 中设置控件的 Tooltip 属性:

    <DataGridTemplateColumn Header="X">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <xctk:DecimalUpDown Value="{Binding PositionX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}">
                    <xctk:DecimalUpDown.Style>
                        <Style TargetType="xctk:DecimalUpDown">
                            <Style.Triggers>
                                <Trigger Property="Validation.HasError" Value="True">
                                    <Setter Property="ToolTip" Value="{Binding (Validation.Errors)[0].ErrorContent, RelativeSource={RelativeSource Self}}" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </xctk:DecimalUpDown.Style>
                </xctk:DecimalUpDown>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    

    【讨论】:

    • 谢谢,完美运行!我知道我很接近,但只是没有风格等方面的经验......
    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2019-06-10
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多