2010-06-05 48 views
12

Me estoy poniendo esto en mi ventana de salida:WPF: ¿Cómo puedo depurar los errores de enlace?

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')

Esta es mi XAML, que cuando el funcionamiento parece correcto

 <GroupBox Header="Grant/Deny Report"> 
      <ListBox ItemsSource="{Binding Converter={StaticResource MethodBinder}, ConverterParameter=GrantDeny, Mode=OneWay}"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <Label Content="{Binding Entity}"/> 
          <Label Content="{Binding HasPermission}"/> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </GroupBox> 

Respuesta

8

Yo también iba a recomendar Bea Stollnitz's article pero Jonathan Allen dieron su puesto en mientras todavía escribía este. También recomiendo los enlaces en this blog entry.

En este caso particular, puede ver que en algún lugar un ListBoxItem tiene un FindAncestor vinculante a un ItemsControl que está fallando. Eso te dice de inmediato hay un ListBoxItem en alguna parte que es o bien:

  1. No en el árbol visual, o
  2. No bajo ItemsControl (un ListBox es un ItemsControl)

Además, usted sabe que alguien, en alguna parte, está vinculando una propiedad VerticalContentAlignment de ListBoxItem con FindAncestor.

En cuanto a los temas del sistema (incluido con Expression Blend y también está disponible a través de NET Reflector BAMLViewer Add-in), vemos esto:

<Style x:Key="{x:Type ListBoxItem}"> 
    <Setter Property="VerticalContentAlignment" 
      Value="{Binding Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}" /> 

Esto explica que la unión viene. La siguiente pregunta es, ¿cómo se está creando un ListBoxItem que no está en un ListBox (u otro ItemsControl)?

Algunas cosas a tener en cuenta:

  • ¿Estás construyendo ListBoxItems en cualquier parte del código?
  • ¿Hay algún ListBoxItem explícitamente especificado en su XAML?
  • ¿Tiene algún código que manipule manualmente los elementos en ListBox?

Esperemos que esto lo guiará en la dirección correcta.

+0

Para sus questsions, No, No y No. Lo único que es interesante es que ItemsSource es una tabla de datos. –

+0

Pero bueno, al menos me diste suficiente información para saber que está en las hojas de estilo. –

3

Me encontré con un problema similar con el TreeView (aunque mis errores de enlace de datos aparecieron como Informativos).

Resolví el problema al definir un estilo implícito en el recurso TreeView para TreeViewItem. Dentro de ese estilo, definí las propiedades de alineación de contenido vertical y horizontal faltantes.

<TreeView.Resources> 
    <Style TargetType="{x:Type TreeViewItem}" > 
      <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
    </Style> 
</TreeView.Resources> 
+0

Me encontré con este mismo problema y lo resolví utilizando su enfoque. ¡Gracias! – cordialgerm

Cuestiones relacionadas