Wpf 绑定到未知类型的父级

Wpf 绑定到未知类型的父级,wpf,data-binding,controltemplate,Wpf,Data Binding,Controltemplate,我有一个工具提示的样式和模板,希望将工具提示中的一些内容绑定到父级的错误集合。我可以像下面的代码中那样显式地设置AncestorType来实现这一点,但我希望它能够全局应用。我曾经尝试过使用UIElement和FrameworkElement,但没有成功,但我认为这是因为它没有在树上找到正确的元素 <ControlTemplate.Triggers> <DataTrigger Binding="{Binding Relativ

我有一个工具提示的样式和模板,希望将工具提示中的一些内容绑定到父级的错误集合。我可以像下面的代码中那样显式地设置AncestorType来实现这一点,但我希望它能够全局应用。我曾经尝试过使用UIElement和FrameworkElement,但没有成功,但我认为这是因为它没有在树上找到正确的元素

<ControlTemplate.Triggers>
            <DataTrigger
              Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBox}}, Path=(Validation.HasError)}"
              Value="True">
              <Setter
                Property="Visibility"
                TargetName="ErrorBorder"
                Value="Visible" />
              <Setter
                Property="Text"
                TargetName="ErrorText"
                Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBox}}, Path=(Validation.Errors)[0].ErrorContent}" />
            </DataTrigger>
          </ControlTemplate.Triggers>

您可以在RelativeSource中使用AncestorLevel。

您可以在RelativeSource中使用AncestorLevel。

简单,请尝试

 AncestorType=Control
简单,试试看

 AncestorType=Control

通过使用以下绑定绑定到工具提示的PlacementTarget,我可以实现这一点:

{Binding RelativeSource={RelativeSource Mode=Self}, Path=PlacementTarget.(Validation.HasError)}"

只要工具提示的PlacementTarget是具有错误验证的控件(在我的例子中就是这样),这似乎工作得很好。

我可以通过使用以下绑定绑定到工具提示的PlacementTarget来实现这一点:

{Binding RelativeSource={RelativeSource Mode=Self}, Path=PlacementTarget.(Validation.HasError)}"

只要工具提示的PlacementTarget是具有错误验证的控件(在我的例子中就是这样),这似乎工作得很好。

假设具有验证的父元素始终处于同一级别,我不能保证这一点。不管怎样,我使用Control、FrameworkElement和UIElement尝试过这种方法,但运气不好。这是假设具有验证的父元素始终处于同一级别,我不能保证这一点。我使用Control、FrameworkElement和UIElement尝试过这种方法,但运气不好。因此,您希望此赋值在逻辑树上冒泡,直到找到可以接受绑定的元素,然后再赋值吗?我不知道您是否能够在Xaml中实现这一点,所以您希望这个赋值在逻辑树上冒泡,直到它找到一个可以接受绑定的元素,然后再赋值?我不知道你是否能够在Xaml中实现这一点。