FlowDocumentScrollViewer в таблице данных
Я получил следующее сообщение об ошибке: "Необходимо отключить указанный дочерний элемент от текущего родительского Visual перед подключением к новому родительскому Visual"
Я знаю, в чем проблема, но я не могу исправить это в моем реальном приложении, я использую BeginningEdit()
Событие для всплывающего нового окна для редактирования myObject, который содержит нарушителя спокойствия Flowdocument
Я также использую свое расширение Clone для создания 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;
}
}
1 ответ
ОК, чтобы решить эту проблему, вы должны использовать 2 свойства в DataGridCell
один для вашего CellTemplate
а также
один для вашего CellEditingTemplate
каждый раз, когда вызывается ваш геттер, вы должны создать новый FlowDocument
потому что это швы, как есть ошибка / сбой на том, как DataGridCell
содержит такие данные.