Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么WPF样式在工具提示中显示验证错误对文本框有效,但对组合框无效?_C#_Wpf_Validation_Data Binding_Styles - Fatal编程技术网

C# 为什么WPF样式在工具提示中显示验证错误对文本框有效,但对组合框无效?

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

我正在使用一种典型的样式,将验证错误显示为文本框的IErrorDataInfo的工具提示,如下所示,它工作正常

    <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>