C# 为什么WPF样式在工具提示中显示验证错误对文本框有效,但对组合框无效?
我正在使用一种典型的样式,将验证错误显示为文本框的IErrorDataInfo的工具提示,如下所示,它工作正常C# 为什么WPF样式在工具提示中显示验证错误对文本框有效,但对组合框无效?,c#,wpf,validation,data-binding,styles,C#,Wpf,Validation,Data Binding,Styles,我正在使用一种典型的样式,将验证错误显示为文本框的IErrorDataInfo的工具提示,如下所示,它工作正常 <Style TargetType="{x:Type TextBox}"> <Style.Triggers> <Trigger Property="Validation.HasError" Value="true"> <Setter Property="ToolTi
<Style 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>
尝试将转换器转换为所述的多行字符串我看到您使用的代码张贴在多个地方,但我觉得奇怪的是
Path=(Validation.Errors)[0].ErrorContent}
没有任何危险信号。但我也是WPF的新手,也许在每一个案例中都有一些秘密
与其尝试使用数组索引索引可能为空的集合,不如添加一个返回列表中第一个错误的转换器。您将获得此错误,因为当验证发现没有问题时,错误集合将返回,但没有任何项,并且以下绑定逻辑失败:
Path=(Validation.Errors)[0].ErrorContent}"
您正在通过特定索引访问验证集合。我目前正在研究一个DataTemplate建议来替换此文本
我喜欢微软在验证模板的标准示例中列出这一点。
更新,以便将上面的代码替换为以下代码,绑定逻辑将知道如何处理空的validationresult集合:
Path=(Validation.Errors).CurrentItem.ErrorContent}"
(添加以下xaml作为注释)
我认为这是最好的方式:
Path=(Validation.Errors)/ErrorContent
/
实际上等于@Nathan的CurrentItem
在我的情况下,
CurrentItem
是不可能的。在我的情况下,当我尝试应用“解决方案:
无法在类型为的数据上下文中解析属性“CurrentItem”
'System.Collections.ObjectModel.ReadOnlyObservableCollection'
因此,我采用了的解决方案,最终我的代码是:
<ControlTemplate x:Key="ValidationErrorTemplate">
<DockPanel Margin="5,0,36,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" DockPanel.Dock="Right"
Margin="5,0,36,0"
ToolTip="{Binding ElementName=ErrorAdorner, Path=AdornedElement.(Validation.Errors)/ErrorContent}"
ToolTipService.ShowDuration="300000"
ToolTipService.InitialShowDelay="0"
ToolTipService.BetweenShowDelay="0"
ToolTipService.VerticalOffset="-75"
>
CurrentItem对我也不起作用,但是 @Nattan的回答适用于我有自定义文本框资源的情况。谢谢@Nathan我花了一个小时在这上面
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)/ErrorContent}" />
</Trigger>
</Style.Triggers>
一个星期以来,我一直认为我的一个问题很愚蠢,但一直没有人回答。有没有人对我的问题在哪里进行研究或提供更多信息提出建议?谢谢你的更正!我也遇到了同样的问题,现在输出窗口中难看的消息消失了。感谢您提供关于.CurrentItem
而不是[0]
的提示!“控制台上的那个错误一直困扰着我。”纳桑特雷吉卢斯提供了极好的提示。在ControlTemplate上,我必须使用ToolTip=“{Binding Path=/ErrorContent}”
否则我只在工具提示中得到了一个类名。酷!您应该提到,VisualStudio提供了一个警告,指出ErrorContent
在ObservableCollection
上是未知的。任何时候都可以@Nathantergillus非常感谢你的提示!经过几天的。。。!但是请更新你的帖子,它似乎使用了/
而不是。目前来说,cutentitem
是正确的@Alexander这几天似乎也在工作!我测试了IEnumerable
和observeableCollection
。无论如何,谢谢你的提示!这个问题发生在2010年。从那以后情况发生了变化then@AltianoGerung非常感谢更新提示!是的,我同意有人也应该更新正确的答案!
<ControlTemplate x:Key="ValidationErrorTemplate" TargetType="Control">
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="Red" FontSize="24" Text="*"
ToolTip="{Binding .CurrentItem}">
</TextBlock>
<AdornedElementPlaceholder>
</AdornedElementPlaceholder>
</StackPanel>
</ControlTemplate>
Path=(Validation.Errors)/ErrorContent
Path=(Validation.Errors)/ErrorContent
<ControlTemplate x:Key="ValidationErrorTemplate">
<DockPanel Margin="5,0,36,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" DockPanel.Dock="Right"
Margin="5,0,36,0"
ToolTip="{Binding ElementName=ErrorAdorner, Path=AdornedElement.(Validation.Errors)/ErrorContent}"
ToolTipService.ShowDuration="300000"
ToolTipService.InitialShowDelay="0"
ToolTipService.BetweenShowDelay="0"
ToolTipService.VerticalOffset="-75"
>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)/ErrorContent}" />
</Trigger>
</Style.Triggers>