Wpf 将datagridrow的错误数据绑定到工具提示文本块
我试图在工具提示中显示数据网格行的验证错误消息。以下是我直接使用网格控件的ToolTip属性(wihtout样式)时的代码: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"
现在,这将正确显示工具提示。一切都很好
问题:
一旦我开始单独设置工具提示的样式,绑定就会以某种方式停止工作。以下是我正在尝试但不起作用的代码:
<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>