2010-10-08 17 views
9

Recibo los siguientes errores del código siguiente ... no estoy seguro de por qué (y sí, produce los 4 aunque sea el mismo 2 repetido). Ah, y no produce el efecto de filas alternas, aunque antes de estos errores aparecía el mismo código funcionando.WPF Error de unión de datos: No se puede encontrar el origen para el enlace con la referencia 'RelativeSource FindAncestor'

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation') 
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility') 
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation') 
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility') 
<UserControl x:Class="MyProject.Views.RegistrationAllView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:MyProject.Views" 
      > 
    <Grid> 
     <DataGrid Name="TestGrid" Grid.Row="2" Grid.ColumnSpan="2" AutoGenerateColumns="True" 
        ItemsSource="{Binding Registrations}" SelectedValue="{Binding CurrentRegistration}" IsReadOnly="True" GridLinesVisibility="None" 
        AlternatingRowBackground="#FFCAC6C6" 
        > 
      <DataGrid.RowStyle> 
       <Style> 
        <EventSetter Event="DataGridRow.MouseDoubleClick" Handler="TestGrid_MouseDoubleClick" /> 
       </Style> 
      </DataGrid.RowStyle> 
     </DataGrid> 
    </Grid> 
</UserControl> 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

using MyProject.ViewModels; 

using WPFBase; 
using WPFBase.ViewModels; 

namespace MyProject.Views 
{ 
    public partial class RegistrationAllView : UserControl 
    { 
     public RegistrationAllView() 
     { 
      InitializeComponent(); 
     } 

     private void TestGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
     { 
      DependencyObject source = e.OriginalSource as DependencyObject; 

      RegistrationEntity entity = (RegistrationEntity)TestGrid.CurrentItem; 

      TabControl TabCollection = (TabControl)UIHelper.TryFindParentControl<TabControl>(this); 

      RegistrationForm view = new RegistrationForm(); 

      XTabItem tabItem = new XTabItem(); 
      tabItem.Header = String.Format("Registration (#{0})", entity.ID); 
      tabItem.Content = view; 

      TabCollection.Items.Add(tabItem); 

      tabItem.Focus(); 

      AbstractViewModel vm = new RegistrationViewModel(entity); 

      view.DataContext = vm; 
     } 
    } 
} 
+0

¿Dónde está 'DataTemplate' para los objetos en su' ItemsSource'? –

+0

@Robert Rossney: Lo configuré para AutoGenerateColumns, así que realmente no necesito una DataTemplate. –

Respuesta

0

En primer lugar, las filas del DataGrid WPF son de color blanco de forma predeterminada para qué estás configurando emblanquecido en su estilo? Puede deshacerse completamente del bit DataGrid.Resources y reemplazar AlternationCount = 2 con AlternatingRowBackground = "FFCAC6C6" (aunque esto hará que la primera fila sea blanca y la segunda coloreada, etc. Si eso no es aceptable, puede eliminarlo el disparador que establece el fondo blanco).

Acerca de los errores - ya que el código del teléfono proporcionado no contiene ningún enlace con el conjunto RelativeSource, sólo puedo concluir dos cosas:

1) o bien usted no proporcionó el código completo y que necesita para su relook enlaces que tienen RelativeSource en ellos, ya que claramente hay un error en alguna parte.

2) No está utilizando el DataGrid incorporado de WPF. Tal vez el toolkit WPF DataGrid de codeplex? Aunque creo que tampoco debería tener esos errores, es más probable que sea la conclusión 1 otra vez.

+0

He publicado la totalidad del código, aunque realmente no había mucho más que publicar. Realicé cambios en AlternatingRowBackground como se sugiere y funciona bien y está más condensado. Todavía recibo los errores, aunque realmente no parecen afectar la funcionalidad o la visualización. Ah, y estoy usando la Datagrid integrada (no la del WPF Toolkit). –

+0

Debe haber un poco de código que tenga un enlace con el modo de búsqueda de antepasado. 1) Tal vez alguna clase en xmlns: local = "clr-namespace: MyProject.Views"? 2) O se reemplaza alguna plantilla en alguna parte ... 3) Si elimina los enlaces ItemsSource y SelectedValue de la cuadrícula de datos, ¿desaparecen los errores? 4) Creo que debería haber una distancia para aumentar la verbosidad de los errores de enlace de datos, busque Google y tal vez obtendrá más pistas sobre dónde se generan esos errores. 5) Dado que se trata de un control de usuario que no se puede depurar por sí mismo, ¿tal vez los errores provienen de la ventana de alojamiento? – Marko

7

Este es un error conocido; check http://wpf.codeplex.com/discussions/47047 y http://social.msdn.microsoft.com/Forums/en-GB/wpf/thread/af7cd462-febe-482b-9a04-61b076933c7b para más detalles.

En la primera URL (Codeplex) voy a publicar una solución; sin embargo, implica la modificación del código fuente de WPF Toolkit.

+0

Gran enlace, gracias. Como el hackeo de WPF no está en mi caso, la 9ª publicación desde la parte superior> "La única solución que he encontrado es establecer HeadersVisibility =" All "y RowHeaderWidth =" 0 "." fue la solución preferida para mí. – Barton

Cuestiones relacionadas