当我双击时 - 或者当它已经聚焦时单击一次 - 在我的DataGridTemplateColumn中的Listbox的空白区域中的项目下面,然后我收到上面的错误消息。
我错了什么?
这是我的代码:
<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>
关于我点击“myPhotos.png”项目条目下方的图像: alt text http://666kb.com/i/bh6lbd47okwancfel.png
编辑:此错误在XAML中也已经通过工具提示可见,只是没有看到错误工具提示......
答案 0 :(得分:8)
这确实是一个错误。我运行你的repro项目并在抛出异常时检出调用堆栈。它在调用VisualTreeHelper.IsAncestorOf期间发生在DataGridCell.RemoveBindingExpressions中。后一种方法在传递非Visual或Visual3D的对象时抛出异常。但DataGridCell正在传递它,无论绑定的目标是什么元素。在你的情况下恰好是一个不是从Visual派生的Run。
我想你可以通过使用IValueConverter来创建FlowDocument并绑定RichTextBox.Document以便将绑定应用于RichTextBox来解决它。但由于Document不是依赖属性,因此它不能成为绑定的目标。
所以你想要做的就是创建一个托管RichTextBox控件的UserControl:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Local:HomeworkControl Text="{Binding Homework}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
然后在该用户控件中,您将负责构建RichTextBox,文档,运行等。不幸的是,我认为这只是DataGrid控件中的一个限制(也就是bug)。
答案 1 :(得分:6)
有趣的是,这也发生在我身上。乔什说的话让我思考。看起来,一旦你选择了单元格并再次选择它,它会尝试加载未在我的情况下指定的CellEditingTemplate,并且它会抛出Visual / Visual3d异常。
我通过在 DataGridTemplateColumn 上指定 IsReadOnly =“True”来解决此问题。我还是不使用CellEditingTemplate,因为我在单元格模板中加载了TextBoxes / DatePicker / Checkbox等等的批量插入。
答案 2 :(得分:4)
我遇到了一个带有自定义列的Datagrid的问题,该列带有嵌入式运行的超链接,并在Run的Text属性上设置了绑定。当运行文本绑定未明确设置为 BindingMode.OneWay 时,我收到此错误。明确地设置它解决了问题。注意我在数据网格中编辑 ANY 列时遇到异常而不仅仅是这个。
答案 3 :(得分:0)
我在Blend中经常收到此错误,但在DataGrid中没有运行时。
我发现编译应用程序(在我的情况下在VS中)并允许Blend重新加载DLL修复了它。重新排列列似乎会触发它自行更新。虽然很痛苦!
答案 4 :(得分:0)
编辑数据网格中的列时出现同样的错误。这里是xaml专栏:
<DataGridTextColumn Header="Precio Unit." Binding="{Binding UnitPrice,StringFormat=0.00}" Width="Auto" MinWidth="115" />
但错误发生在另一列;这里是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>
错误消失明确指定:
<Run Text = "{Binding Stock, Mode = OneWay}" />