我收到以下错误消息:“必须在附加到新父Visual"之前从当前父Visual断开指定的子节点。
我知道问题出在哪里,但我无法在我的实际应用程序中修复它,我使用BeginningEdit()事件弹出一个新窗口来编辑包含麻烦制造者Flowdocument的myObject
我也使用我的克隆扩展来创建一个new Flowdocument,希望它可以删除这个错误,但是它不会改变任何事情
XAML
<DataGrid AutoGenerateColumns="False" Name="myDGrid">
<DataGrid.Columns>
<DataGridTemplateColumn Header="myHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<FlowDocumentScrollViewer Width="100" Height="50"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden"
FontStretch="Normal" FontSize="13" FontWeight="Bold"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
IsManipulationEnabled="False" IsSelectionEnabled="False"
Document="{Binding}">
</FlowDocumentScrollViewer>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Label/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>代码隐藏
public string myFlowString
{
get
{
return (@"<FlowDocument PagePadding='0,0,0,0' Background='Green' AllowDrop='True' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>
<Paragraph Background='Red' TextAlignment='Center'> some text befor <LineBreak/> Komponente 1<Run FontFamily='Palatino Linotype' Typography.Variants='Superscript'>1,2,3,4</Run>
<LineBreak/> Nachtisch</Paragraph> </FlowDocument>");
}
}
public MainWindow()
{
InitializeComponent();
var _mylist = new List<FlowDocument>();
var myFlowDoc = XamlReader.Load(XmlReader.Create(new StringReader(myFlowString))) as FlowDocument;
for (int i = 0; i < 10;i++ )
_mylist.Add(myFlowDoc.Clone());
myDGrid.ItemsSource = _mylist;
}
}
public static class Extension
{
public static FlowDocument Clone(this FlowDocument flowdoc)
{
var xml = XamlWriter.Save(flowdoc);
return xml.toFlowDocument();
}
public static FlowDocument toFlowDocument(this string xamlString)
{
var stringReader = new StringReader(xamlString);
var xmlReader = System.Xml.XmlReader.Create(stringReader);
return XamlReader.Load(xmlReader) as FlowDocument;
}
}发布于 2013-03-26 10:42:54
要解决这个问题,每个DataGridCell应该使用两个属性
一个给你的CellTemplate和
一个给你的CellEditingTemplate
每次您的getter被调用时,您都必须创建一个新的FlowDocument,因为它接合起来就像DataGridCell如何保存这样的数据一样存在缺陷/故障。
https://stackoverflow.com/questions/15404563
复制相似问题