1

次のエラー メッセージが表示されました: 「新しい親ビジュアルにアタッチする前に、指定された子を現在の親ビジュアルから切断する必要があります」

問題はわかっていますが、実際のアプリケーションでは修正できません。BeginningEdit()イベントを使用して、トラブルメーカーを含む myObject を編集するための新しいウィンドウをポップアップしますFlowdocument

また、クローン拡張機能を使用して、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;
    }
}
4

1 に答える 1

1

この問題を解決するには、2 つDataGridCell
のプロパティを使用する必要がCellTemplateあり
ます。CellEditingTemplate

ゲッターが呼び出されるたびに、そのようなデータを保持FlowDocumentする方法にバグ/グリッチがあるように見えるため、新しいものを作成する必要があります。DataGridCell

于 2013-03-26T10:42:54.800 に答える