Wpf 将datagridrow的错误数据绑定到工具提示文本块

Wpf 将datagridrow的错误数据绑定到工具提示文本块,wpf,data-binding,datagrid,Wpf,Data Binding,Datagrid,我试图在工具提示中显示数据网格行的验证错误消息。以下是我直接使用网格控件的ToolTip属性(wihtout样式)时的代码: 现在,这将正确显示工具提示。一切都很好 问题: 一旦我开始单独设置工具提示的样式,绑定就会以某种方式停止工作。以下是我正在尝试但不起作用的代码: <Grid Margin="0,-2,0,-2"> <Ellipse x:Name="ErrorEllipse" StrokeThickness="0" Fill="Red"

我试图在工具提示中显示数据网格行的验证错误消息。以下是我直接使用网格控件的ToolTip属性(wihtout样式)时的代码:


现在,这将正确显示工具提示。一切都很好

问题:

一旦我开始单独设置工具提示的样式,绑定就会以某种方式停止工作。以下是我正在尝试但不起作用的代码:

<Grid Margin="0,-2,0,-2">
    <Ellipse x:Name="ErrorEllipse" StrokeThickness="0" Fill="Red" 
           Width="{TemplateBinding FontSize}" 
           Height="{TemplateBinding FontSize}" />
           <TextBlock Text="!" FontSize="{TemplateBinding FontSize}" 
               FontWeight="Bold" Foreground="White" 
               HorizontalAlignment="Center"/>
               <Grid.ToolTip>
                   <ToolTip Background="Transparent" BorderBrush="Transparent" Height="Auto" Width="Auto">
                       <Border >
                           <TextBlock Text= "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent}"
                                                       MinHeight="20"
                                                       MinWidth="100"
                                                       Foreground="White"
                                                       Background="Red"/>
                        </Border>
                    </ToolTip>
                </Grid.ToolTip>
             </Grid>


我在这里遗漏了什么?如何实现正确的绑定?可能是一些基本的东西,但我不知道…

您应该使用ControlTemplate单独设置工具提示的样式

<Style x:Key="ValidationToolTipStyle" TargetType="{x:Type ToolTip}">
    <Setter Property="Background" Value="Transparent" />
    ... 
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToolTip}">
                <Border >
                    <TextBlock 
                        Text="{TemplateBinding Content}"
                        MinHeight="20"
                        MinWidth="100"
                        Foreground="White"
                        Background="Red"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

... 
然后在XAML中,使用如下工具提示:

<Grid Margin="0,-2,0,-2">
    <Ellipse x:Name="ErrorEllipse" 
        StrokeThickness="0" Fill="Red" 
        Width="{TemplateBinding FontSize}" 
        Height="{TemplateBinding FontSize}" />
    <TextBlock 
        Text="!" 
        FontSize="{TemplateBinding FontSize}" 
        FontWeight="Bold"
        Foreground="White" 
        HorizontalAlignment="Center" />
    <ToolTipService.ToolTip>
       <ToolTip 
           Style="{StaticResource ValidationToolTipStyle}" 
           Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Path=(Validation.Errors)[0].ErrorContent}" />
        </ToolTip>
    </ToolTipService.ToolTip>
</Grid>


我希望这能有所帮助。

不是款式问题,而是您的问题。工具提示不在可视化树中。这是一个弹出窗口。因此,您的相对资源将找不到datagridrow。您需要一个位于可视化树中的资源,并获取该资源或placementtarget。这里有一个关于你的问题的超级简单的解释,顺便说一下,你应该在谷歌上搜索一下。也。[0]使用/替换时不会出现任何错误。
<Grid Margin="0,-2,0,-2">
    <Ellipse x:Name="ErrorEllipse" 
        StrokeThickness="0" Fill="Red" 
        Width="{TemplateBinding FontSize}" 
        Height="{TemplateBinding FontSize}" />
    <TextBlock 
        Text="!" 
        FontSize="{TemplateBinding FontSize}" 
        FontWeight="Bold"
        Foreground="White" 
        HorizontalAlignment="Center" />
    <ToolTipService.ToolTip>
       <ToolTip 
           Style="{StaticResource ValidationToolTipStyle}" 
           Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Path=(Validation.Errors)[0].ErrorContent}" />
        </ToolTip>
    </ToolTipService.ToolTip>
</Grid>