2010-03-03 27 views
6

cuando d ouble-click - o haga clic una vez cuando ya está enfocado - debajo de los elementos en un área vacía del Listbox que está dentro de mi DataGridTemplateColumn, entonces aparece el mensaje de error anterior.WPF: System.ArgumentException => {"'{0}' no es un Visual o Visual3D."}

¿A qué me equivoco?

Este es mi código:

<DataGridTemplateColumn Width="0.3*" Header="Attachments"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical"> 
       <Button>Add</Button> 
       <Button>Delete</Button> 
       <ListBox Name="itemListBox" BorderThickness="0" ItemsSource="{Binding Attachments}" >         
        <ListBox.ItemTemplate> 
         <DataTemplate>           
          <StackPanel Orientation="Vertical" Margin="5">             
           <TextBlock Text="{Binding DocumentFilename}" /> 
          </StackPanel>            
         </DataTemplate> 
        </ListBox.ItemTemplate>          
       </ListBox> 
      </StackPanel> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

respecto que la imagen donde hago clic debajo de la "myPhotos.png" entrada de artículo: alt text http://666kb.com/i/bh6lbd47okwancfel.png

EDITAR: este error también es ya visible en XAML a través de información sobre herramientas simplemente no se ha visto ese error información sobre herramientas ...

+0

Se puede publicar el código detrás de esto? –

+0

no existe código detrás :) – msfanboy

+2

de acuerdo con esto => http://social.msdn.microsoft.com/forums/en-US/wpf/thread/5982cafe-f75b-42b4-99dc-50d3a81b30b0/ Apuesto Encontré un error !!! – msfanboy

Respuesta

8

Eso de hecho parece ser un error. Ejecuté su proyecto repro y revisé la pila de llamadas cuando se lanzó la excepción. Sucede en DataGridCell.RemoveBindingExpressions durante una llamada a VisualTreeHelper.IsAncestorOf. El último método arroja una excepción cuando se pasa un objeto que no es Visual o Visual 3D. Pero DataGridCell lo pasa independientemente del elemento que sea el destino del enlace. En su caso, eso es una ejecución que no deriva de Visual.

Estaba pensando que podría evitarlo utilizando un IValueConverter para crear el FlowDocument y vinculando RichTextBox.Document para que el enlace se aplique a RichTextBox. Pero dado que Document no es una propiedad de dependencia, no puede ser un destino de enlace.

Así que en vez lo que es posible que desee hacer es crear un control de usuario que aloja el control RichTextBox:

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Local:HomeworkControl Text="{Binding Homework}" /> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

Luego, en que el control de usuario que se haría cargo de la construcción de la RichTextBox, documento, correr, etc. Desafortunadamente Creo que esto es solo una limitación (también conocida como error) en el control DataGrid.

+0

@Josh Parece correcto, intenté teleriks RadGridView y reemplacé el DataGrid de M $. Todo funciona bien sin excepción. Si revisas mi otro Thread incluso con el RadGridView, ahora el RichTextbox se está retrasando y no puedo escribir muy rápido => http://stackoverflow.com/questions/2404736/wpf-richtextbox-typing-twice-slower-than-in-a -vb-5-0-richtextbox – msfanboy

0

Aparece este error frecuentemente en Blend, pero no en tiempo de ejecución en un DataGrid.

He encontrado que compilar la aplicación (en mi caso en VS) y permitir que Blend vuelva a cargar las DLL lo soluciona. También la reorganización de las columnas parece desencadenar que se actualice solo. ¡Gran dolor sin embargo!

5

Curiosamente, esto también me pasó a mí. Lo que Josh dijo me hizo pensar. Parece que una vez que selecciona la celda y la selecciona de nuevo, intenta cargar CellEditingTemplate, que no está especificado en mi caso y el suyo, y arroja la excepción Visual/Visual3d.

me lo arreglen especificando IsReadOnly = "true" en mi DataGridTemplateColumn. No uso CellEditingTemplate de todos modos porque estoy haciendo inserciones masivas con TextBoxes/DatePicker/Checkboxes, etc. cargadas en las plantillas de la celda.

4

Tuve el mismo problema con una cuadrícula de datos con una columna personalizada con un hipervínculo con ejecución incrustada, con el conjunto de enlaces en la propiedad Texto de ejecución. Cuando el enlace ejecutar texto no estaba explícitamente configurado para ser BindingMode.OneWay Recibí este error. Configurarlo solucionó explícitamente el problema. Nota Obtuve la excepción al editar CUALQUIER columna en la cuadrícula de datos no solo esta.

0

Me sale este mismo error al editar una columna en una cuadrícula de datos. aquí columna xaml:

<DataGridTextColumn Header="Precio Unit." Binding="{Binding UnitPrice,StringFormat=0.00}" Width="Auto" MinWidth="115" /> 

Pero el error ocurrió en otra columna; aquí el XAML:

     <DataGridTemplateColumn Header="Descripción" MinWidth="600" Width="Auto" IsReadOnly="True" > 
          <DataGridTemplateColumn.CellTemplate > 
           <DataTemplate > 
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> 
             <TextBlock Text="{Binding FixedName, Converter={StaticResource toUpperConverter}}" Background="Transparent" 
               VerticalAlignment="Center" Margin="0"/> 
             <TextBlock Margin="5,0,0,0" Foreground="#FFCB6A6A" FontWeight="Normal"> 
              <Run Text="(Stock "/> 
              <Run Text="{Binding Stock}"/> 
              <Run Text=")"/> 
             </TextBlock> 
            </StackPanel> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 

El error desaparece especificar explícitamente:

<Run Text = "{Binding Stock, Mode = OneWay}" /> 
Cuestiones relacionadas